我正在尝试将一组参数传递到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进行编码。
非常感谢您。
答案 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,))