You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python导入CSV至SQL Server时遇语法错误求助

搞定CSV导入SQL Server的语法错误问题

嘿,我看你这是在把CSV导入SQL Server时卡壳了,报错说Incorrect syntax near '/'对吧?这问题根源其实很简单——你直接把CSV里的内容拼进SQL语句里了,要是值里有单引号、斜杠这种特殊字符,肯定会把SQL的语法搞乱,而且还存在SQL注入的风险,太不安全了。

正确的姿势是用参数化查询,让pyodbc帮你自动处理这些特殊字符,既不会出错,还安全。给你改好的代码:

import pyodbc
import csv

print('connecting')
conn = pyodbc.connect(
    r'DRIVER={ODBC Driver 13 for SQL Server};'
    r'SERVER=\.\SQLExpress;'
    r'DATABASE=UFOGBobservations;'
    r'Trusted_Connection=yes'
)
print('Connected')
my_cursor = conn.cursor()
print('Cursor established')

def insert_records(table, yourcsv, cursor, cnxn):
    # 把CSV数据导入目标表
    with open(yourcsv, 'r', newline='', encoding='utf-8') as csvfile:
        csvFile = csv.reader(csvfile, delimiter=',')
        header = next(csvFile)
        # 先把表头的多余空格清掉
        headers = [x.strip() for x in header]
        # 构建带参数占位符的SQL,pyodbc用?当占位符
        placeholders = ', '.join(['?' for _ in headers])
        insert_sql = f'INSERT INTO {table} ({", ".join(headers)}) VALUES ({placeholders})'
        
        # 遍历每一行数据
        for row in csvFile:
            # 清理每行字段的前后空格
            cleaned_row = [x.strip() for x in row]
            # 用参数化方式执行,把值单独传进去,不用拼字符串
            cursor.execute(insert_sql, cleaned_row)
    
    conn.commit() # 一定要提交,除非你数据库开了自动提交
    cursor.close()
    conn.close()

table = 'table_1'
mycsv = r'C:\DataAnalystData\UFOGB_Observations.csv' # 换成你的文件路径
insert_records(table, mycsv, my_cursor, conn)

给你说说改了啥:

  • 参数化查询:用?代替直接拼值,pyodbc会自动处理特殊字符的转义,这就解决了你碰到的斜杠语法错误
  • 更直观的字段清理:用列表推导式代替map,看起来更清楚,也方便调试
  • 优化文件读取:加了newline=''和指定编码,避免读取CSV时出现换行符乱码的问题
  • 资源收尾:函数最后把游标和连接都关了,避免占着数据库资源

额外提个小建议:

要是你的CSV文件特别大,用循环一条一条插太慢,换成executemany批量插会快很多,把循环那部分改成这样就行:

# 先把所有行存起来
rows = []
for row in csvFile:
    cleaned_row = [x.strip() for x in row]
    rows.append(cleaned_row)
# 一次性批量插入
cursor.executemany(insert_sql, rows)

这样改完,你那语法错误肯定能解决,代码也更靠谱啦!

内容的提问来源于stack exchange,提问作者B McG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:10