【问题标题】:MSSQL data insertion with Python and pypyodbc - Params must be in a list, tuple使用 Python 和 pypyodbc 插入 MSSQL 数据 - 参数必须在列表、元组中
【发布时间】:2017-07-27 13:49:05
【问题描述】:

我正在尝试将值写入(我可以很好地读取)MSSQL 实例。我的代码类似于:

import pypyodbc
lst = ['val1', 'val2', 'val3']
connection = pypyodbc.connect(...)
cursor = connection.cursor()
cursor.executemany("INSERT INTO table (a, b, c)VALUES(?,?,?)", lst)

这会返回:参数必须在一个列表中,元组。我读过类似的帖子,建议尝试 lst = list(['val1, 'val2', val3']) 但这会返回: list() 最多接受 1 个参数(给定 3 个) 我也尝试过 cursor.execute() 的变体,但同样的问题。

【问题讨论】:

    标签: python sql-server python-3.x pypyodbc


    【解决方案1】:

    注意cursor.execute的区别:

    .execute ( operation [, parameters ])

    参数可以作为序列或映射提供,并将绑定到操作中的变量。

    和cursor.executemany:

    .executemany ( operation , seq_of_parameters )

    准备一个数据库操作(查询或命令),然后针对所有参数序列或在序列中找到的映射执行它 seq_of_parameters。

    因此,如果您只针对 一个 组值执行查询,请像这样调用它:

    values = ['val1', 'val2', 'val3']
    cursor.executemany("INSERT INTO table (a, b, c) VALUES (?,?,?)", [values])
    

    或者,对于多组值:

    values1 = ['val1', 'val2', 'val3']
    values2 = ['val3', 'val2', 'val1']
    cursor.executemany("INSERT INTO table (a, b, c) VALUES (?,?,?)", [values1, values2])
    

    【讨论】:

    • 谢谢,但遗憾的是它现在返回:('HY000', 'SQL 包含 3 个参数标记,但提供了 1 个参数')
    • 您确定您运行的代码与您在问题中提供的代码相同吗?因为只有 3 个参数占位符。
    猜你喜欢
    • 2021-11-14
    • 2014-12-08
    • 2021-10-27
    • 1970-01-01
    • 2018-08-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    相关资源
    最近更新 更多