使用 pymssql 成功连接到 Azure 上的 MS SQL 数据库,INSERT 语句执行时没有错误消息但插入了 0 行
Successful connection to MS SQL DB on Azure using pymssql, INSERT statement executing with no error message but 0 rows inserted
我正在使用 pymssql 连接到 Azure 上的 MS SQL 数据库并从 CSV 文件插入记录。我已验证连接成功,并且用于 executemany 参数的列表包含格式正确且值数正确的所有数据。但是,当我 运行 插入脚本 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(operation,parameters) 语法并将值列表作为参数传递,则会导致不正确的语法错误。
cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%d,%d,%f)",list_of_values)
我刚刚在 module reference 中看到仅支持 %s 和 %d。所以我认为这可能是问题所在。但是我如何传递一个浮点数?
使用浮动占位符 (%f) 实际上是问题所在。仅支持 %s 和 %d,但它们纯粹是占位符,不会对它们在 python 中通常执行的格式化方式产生任何影响,因此实际上只需要 %s。工作代码如下:
cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%s,%s,%s)",list_of_values)
我正在使用 pymssql 连接到 Azure 上的 MS SQL 数据库并从 CSV 文件插入记录。我已验证连接成功,并且用于 executemany 参数的列表包含格式正确且值数正确的所有数据。但是,当我 运行 插入脚本 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(operation,parameters) 语法并将值列表作为参数传递,则会导致不正确的语法错误。
cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%d,%d,%f)",list_of_values)
我刚刚在 module reference 中看到仅支持 %s 和 %d。所以我认为这可能是问题所在。但是我如何传递一个浮点数?
使用浮动占位符 (%f) 实际上是问题所在。仅支持 %s 和 %d,但它们纯粹是占位符,不会对它们在 python 中通常执行的格式化方式产生任何影响,因此实际上只需要 %s。工作代码如下:
cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%s,%s,%s)",list_of_values)