2016-07-14 51 views
2

我使用pymssql连接到Azure上的MS SQL数据库并从CSV文件插入记录。我已验证连接是否成功,并且用于executemany参数的列表包含正确格式的所有数据以及正确数量的值。但是,当我运行脚本0行插入 - 但没有错误引发。成功连接到Azure上的MS SQL数据库使用pymssql,INSERT语句执行时没有错误消息但插入0行

我环顾四周,看起来像大多数其他人经历过类似的事情都缺少commit(),但这不是问题。

这是代码。任何帮助是极大的赞赏。

with open('file.csv') as csvfile: 
    data = csv.reader(csvfile) 
    next(data) 
    dicts = ({'col1': line[0], 'col1': line[1], 'col3': line[2], 'col4': int(line[3]), 'col5': int(line[4]), 'col6': float(line[5])} for line in data) 
    to_db = ((i['col1'], i['col2'], i['col3'], i['col4'], i['col5'], i['col6']) for i in dicts) 
    cursor.executemany(
     'INSERT INTO myTable VALUES (%s, %s, %s, %d, %d, %f)', 
     to_db) 
    print str(cursor.rowcount) + " rows inserted" 
    conn.commit() 

编辑:如果我执行使用查询cursor.execute(),并在查询中包含明确的值,那么我可以成功地将行插入到数据库中(请参阅下面的例子)。

cursor.execute("INSERT INTO myTable VALUES ('4/18/2016','test','test',0,0,0.0)") 

但是,如果我用户cursor.executemany(操作参数)的语法,并传递值的列表作为参数,然后它导致一个不正确的语法错误。

cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%d,%d,%f)",list_of_values) 

我刚刚在module reference中看到只支持%s和%d。所以我认为这可能是问题。但我如何通过浮动?

+0

如果您尝试在控制台中执行像这样的示例查询,会发生什么? – Ares

+0

我可以成功地从MS SQL Server Management Studio中插入行。 – michoco

+0

Python脚本是否说没有行更改?数据库中是否反映了这些变化? – Ares

回答

2

使用浮动占位符(%f)实际上是问题所在。只有%s和%d被支持,但是纯粹是占位符,并且不会影响它们通常在python中执行的格式,所以实际上只需要%s。工作代码如下:

cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%s,%s,%s)",list_of_values) 
相关问题