【问题标题】:UPDATE query without hardcoding column names没有硬编码列名的更新查询
【发布时间】: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 UPDATE statement,似乎SET column-name or column-name-list 位是强制性的。
  • 如果你在 Python 中工作,你可以通过多种方式动态构建字符串,还是我误解了这个问题?
  • @lurker:事实是我不想硬编码列名。我正在使用我的数据库结构对许多解决方案进行原型设计。据我所知,row 始终完全适合数据库列,我不想在UPDATE mytable SET columnname1 = ..., columnname2 = ..., ... 中硬编码列名。
  • 对,我明白了。但是在某些时候,SQL 需要知道在执行 UPDATE 时要使用哪一列。当您说您不想对它们进行硬编码时,我假设它们在运行时在某个变量的某个地方仍然是已知的。这样就可以生成UPDATE字符串了。
  • @lurker 假设row 来自SELECT *(因此此列表包含正确顺序的正确列!),被修改(我知道索引的列),然后在数据库中更新。

标签: python sql sqlite


【解决方案1】:

据我所知,你不能这样做。根据https://sqlite.org/lang_update.html

但是还有其他编写查询的方法: https://stackoverflow.com/a/13482298/7791653

您可以自己生成查询。
首先,您选择所有列名并执行 for 循环,在其中构建一个类似“column1,column1,column1”的字符串并将其添加到查询的适当位置。那么你所要做的就是

"UPDATE users
SET  (" + generatedQueryPart = ")
   = ('value1', 'value2', 'value3') 
WHERE some_condition ";

希望这能为您提供更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多