pymssql大容量插入错误(python)

pymssql大容量插入错误(python),python,Python,尝试使用pymssql批量插入CSV文件代码如下: conn = pymssql.connect(host='server', user='user', password='secret', database='My_Dev') cur = conn.cursor() load = 'BULK INSERT TempStaging FROM \'/home/dross/python/scripts/var/csv/' + f + '.csv\' WITH (FIRSTROW = 1,FIELDT

尝试使用pymssql批量插入CSV文件代码如下:

conn = pymssql.connect(host='server', user='user', password='secret', database='My_Dev')
cur = conn.cursor()
load = 'BULK INSERT TempStaging FROM \'/home/dross/python/scripts/var/csv/' + f + '.csv\' WITH (FIRSTROW = 1,FIELDTERMINATOR = ',',ROWTERMINATOR = \'\\n\') GO")'
cur.execute(load)
执行get时出现以下错误:

Traceback (most recent call last):
  File "./uploadResults.py", line 46, in <module>
    cur.execute(sweepload)
  File "pymssql.pyx", line 447, in pymssql.Cursor.execute (pymssql.c:7092)
  File "_mssql.pyx", line 1009, in _mssql.MSSQLConnection.execute_query (_mssql.c:11585)
  File "_mssql.pyx", line 1040, in _mssql.MSSQLConnection.execute_query (_mssql.c:11459)
  File "_mssql.pyx", line 1160, in _mssql.MSSQLConnection.format_and_run_query (_mssql.c:12652)
  File "_mssql.pyx", line 203, in _mssql.ensure_bytes (_mssql.c:2733)
AttributeError: 'tuple' object has no attribute 'encode'
回溯(最近一次呼叫最后一次):
文件“/uploadResults.py”,第46行,在
当前执行(扫描加载)
pymssql.Cursor.execute(pymssql.c:7092)中第447行的文件“pymssql.pyx”
文件“_mssql.pyx”,第1009行,在_mssql.MSSQLConnection.execute_query(_mssql.c:11585)中
文件“_mssql.pyx”,第1040行,在_mssql.MSSQLConnection.execute_query(_mssql.c:11459)中
文件“_mssql.pyx”,第1160行,在_mssql.MSSQLConnection.format_和_run_查询中(_mssql.c:12652)
文件“_mssql.pyx”,第203行,以_mssql.sure_字节(_mssql.c:2733)表示
AttributeError:“tuple”对象没有属性“encode”
第46行是cur.execute Line

注意,
.format()
可以允许,但是如果控制文件名,那么就没有那么糟糕了(不确定这里的参数是否有效)

另外,在处理SQL时,您应该使用三重引号字符串,这样您的生活会更好。像这样:

load = '''BULK INSERT TempStaging FROM /home/dross/python/scripts/var/csv/{}.csv WITH (FIRSTROW=1, FIELDTERMINATOR=',', ROWTERMINATOR='\n')'''.format(filename)
使用三重引号,您还可以将其拆分,以便于阅读:

load = '''
    BULK INSERT TempStaging
    FROM /home/dross/python/scripts/var/csv/{}.csv
    WITH (
        FIRSTROW=1
      , FIELDTERMINATOR=','
      , ROWTERMINATOR='\n'
    )
'''.format(filename)

您应该按如下方式定义字符串:

load = "BULK INSERT TempStaging FROM /home/dross/python/scripts/var/csv/" + f + ".csv  WITH ( FIRSTROW=1 , FIELDTERMINATOR=',' , ROWTERMINATOR='\\n')"   

在SQL中使用三重引号<代码>',行终止符不是escaped@Wayne沃纳:使用以下命令:load='bulkinserttempstaging FROM\'/home/dross/python/scripts/var/csv/'+filename+'.csv\'和(FIRSTROW=1,FIELDTERMINATOR=\',\',rowtterminator=\'\\n\')这是否等同于您的意思?(我是python初学者)