【问题标题】:Inserting some Python list into a SQL Server database将一些 Python 列表插入 SQL Server 数据库
【发布时间】:2019-10-12 04:57:09
【问题描述】:

我正在尝试将一些列表插入到 SQL Server 数据库中。

到目前为止我已经尝试过了:

trdcode = trdcode[1:]
ltp = ltp[1:]
high = high[1:]

datatable = [tuple(trdcode),tuple(ltp),tuple(high)]
query = "INSERT INTO test (TRADINGCODE, LTP, HIGH) VALUES (?, ?, ?)"
cursor.execute(query, datatable)
connection.commit()

但我收到一个错误:

SQL Server 中这些列的数据类型是VARCHAR,列表元素是str

我该如何解决这个错误?或者有没有其他方法可以执行此任务?

【问题讨论】:

    标签: sql-server python-3.x


    【解决方案1】:

    cur.execute 方法不会遍历一个值列表,您应该尝试使用 cur.executemany()。

    所以第一步是构建一个元组列表。每个元组将是要输入数据库的一行:

    rows = [(trdcode[i], ltp[i], high[i]) for i in range(0, len(ltp))]
    

    然后你将这个列表传递给 cursor.executemany 方法:

    cursor.executemany(query, rows)
    connection.commit()
    

    你可以阅读更多关于游标here

    【讨论】:

    • 我试过这个:cursor.executemany(query, [(r,) for r in datatable]) 它的意思是:('SQL 包含 3 个参数标记,但提供了 1 个参数','HY000')
    • 您不需要列表理解,只需按原样传递元组列表(在您的情况下为数据表)。我已将答案编辑得更明确。
    • 感谢您的关注。执行此操作后:cursor.executemany(query, datatable)connection.commit() 我收到此错误:('SQL 包含 3 个参数标记,但提供了 355 个参数','HY000')
    • 刚刚注意到可数据列表不能正确地表示行。再次更新答案。
    • 非常感谢!你是一个真正的英雄。再次感谢您花费宝贵的时间。
    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2016-09-02
    相关资源
    最近更新 更多