【发布时间】:2018-02-28 16:36:15
【问题描述】:
假设mytable 有 5 列,id 是第一列。
是否可以在不对列名进行硬编码的情况下执行UPDATE?
UPDATE mytable VALUES(4, "hello", 31.12, 4141.12, "gjhg") WHERE id = 4
我在大多数tutorials中都没有找到它。
使用 sqlite3 的所需用例:
row = (4, "hello", 31.12, 4141.12, "gjhg")
c.execute('UPDATE mytable VALUES(?) WHERE id = ?', row, row[0])
【问题讨论】:
-
不,查看definition of the
UPDATEstatement,似乎SET column-name or column-name-list位是强制性的。 -
如果你在 Python 中工作,你可以通过多种方式动态构建字符串,还是我误解了这个问题?
-
@lurker:事实是我不想硬编码列名。我正在使用我的数据库结构对许多解决方案进行原型设计。据我所知,
row始终完全适合数据库列,我不想在UPDATE mytable SET columnname1 = ..., columnname2 = ..., ...中硬编码列名。 -
对,我明白了。但是在某些时候,SQL 需要知道在执行 UPDATE 时要使用哪一列。当您说您不想对它们进行硬编码时,我假设它们在运行时在某个变量的某个地方仍然是已知的。这样就可以生成UPDATE字符串了。
-
@lurker 假设
row来自SELECT *(因此此列表包含正确顺序的正确列!),被修改(我知道索引的列),然后在数据库中更新。