python - 使用 pymssql 成功连接到 Azure 上的 MS SQL DB,执行 INSERT 语句,没有错误消息,但插入了 0 行

标签 python sql-server python-2.7 azure-sql-database pymssql

我正在使用 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(操作,参数)语法并将值列表作为参数传递,则会导致不正确的语法错误。

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

我刚刚在 module reference 中阅读仅支持 %s 和 %d。所以我想这可能是问题所在。但是我如何传递 float 呢?

最佳答案

使用 float 占位符 (%f) 实际上是问题所在。仅支持 %s 和 %d,但它们纯粹是占位符,对它们在 python 中通常的格式化方式没有任何影响,因此实际上只需要 %s。工作代码如下:

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

关于python - 使用 pymssql 成功连接到 Azure 上的 MS SQL DB,执行 INSERT 语句,没有错误消息,但插入了 0 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38383457/

相关文章:

python - 如何在脚本退出时可靠地调用 Python 函数?

Python:按位列表操作

python - Pygame 缩放健康栏

python - (又一个)列表别名难题

sql - 如何返回表中每一行的 X 最大行

python - 在 PyGame 中绘制沿直线方向的箭头

python - Pandas 在移动的数据帧上滚动

sql - 使用 CTE 的结果在没有游标的情况下从表中查询

mysql - 通过 MySQL Workbench 将 MS SQL 迁移到 MySQL,打破特殊字符

python - 从列表列表中生成所有可能的组合