将一组参数传递给sqlite中的UPDATE语句

时间:2018-08-10 01:01:11

标签: python sqlite

我正在尝试将一组参数传递到UPDATE语句中,以减少代码的长度。适用于我的代码如下:

cur.executescript('''

    UPDATE Summary

    SET Asset_ID = (SELECT ?
                    FROM ?
                    WHERE ? = Summary.Asset_PK_ID)

    WHERE Asset_ID IS NULL;

    UPDATE Summary

    SET Asset_ID = (SELECT BGA_Name
                    FROM BGA
                    WHERE BGA_PK_ID = Summary.Asset_PK_ID)

    WHERE Asset_ID IS NULL;

''')

但是,我正在尝试将其更改为以下内容:

input = [['Cabinet_Asset_ID', 'Cabinet', 'Cabinet_PK_ID'],
         ['BGA_Name', 'BGA', 'BGA_PK_ID']]


cur.executemany('''

    UPDATE Summary

    SET Asset_ID = (SELECT ?
                    FROM ?
                    WHERE ? = Summary.Asset_PK_ID)

    WHERE Asset_ID IS NULL;

''',input)

但是我收到错误消息:"sqlite3.OperationalError: near "?": syntax error"

任何建议都将不胜感激,因为我刚刚开始使用python和SQL进行编码。

非常感谢您。

1 个答案:

答案 0 :(得分:0)

?仅可用于WHERE子句,而不能用于输出从中选择的列或表。您只需为每个SQL语句使用循环将它们格式化为字符串即可:

input = [['Cabinet_Asset_ID', 'Cabinet', 'Cabinet_PK_ID'],
         ['BGA_Name', 'BGA', 'BGA_PK_ID']]

for column, table, key in input:
    cur.execute('''
    UPDATE Summary
    SET Asset_ID = (SELECT {}
                    FROM {}
                    WHERE ? = Summary.Asset_PK_ID)
    WHERE Asset_ID IS NULL;
'''.format(column, table), (key,))