我正在尝试将string
替换为id
:
import sqlite3
TABLES = ['table1', 'table2', ...]
PAR_TYPES_STRINGS = ['foo', 'bar', ...]
PAR_TYPES_ID = [1, 2, ...]
def upateTable(table, parTypeId, parTypeString):
return f"UPDATE {table} SET par_type = {parTypeId} WHERE par_type = {parTypeString};"
conn = sqlite3.connect('existing_db.db')
cursor = conn.cursor()
for table in TABLES:
for index, parTypeString in enumerate(PAR_TYPES_STRINGS):
parTypeId = PAR_TYPES_ID[index]
cursor.execute(upateTable(table, parTypeId, parTypeString))
conn.commit()
cursor.close()
退货:
sqlite3.OperationalError:无此列:浮
我静态地使用par_type
作为列名,并将其与parTypeString
(动态地包含foo
)进行比较。
WHERE par_type = {parTypeString} < dynamically passed variable
^
hardcoded column name
然而,它说“no such column foo”,这是for loop
从PAR_TYPES_STRINGS
中取出的第一个元素,为什么呢?
1条答案
按热度按时间6tdlim6h1#
在函数定义中,需要将
{parTypeString}
放在引号中:'{parTypeString}'
,因为您要检查硬编码列与该字符串匹配的位置。否则,该表达式将被解释为检查两列之间是否相等,因此会出现错误消息。