sqlite 尝试更新时出现“no such column”错误

r7xajy2e  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(1170)

我正在尝试将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 loopPAR_TYPES_STRINGS中取出的第一个元素,为什么呢?

6tdlim6h

6tdlim6h1#

在函数定义中,需要将{parTypeString}放在引号中:'{parTypeString}',因为您要检查硬编码列与该字符串匹配的位置。否则,该表达式将被解释为检查两列之间是否相等,因此会出现错误消息。

相关问题