【问题标题】:Populate SQL query with Python variables [closed]使用 Python 变量填充 SQL 查询 [关闭]
【发布时间】:2022-01-19 15:02:50
【问题描述】:

我有一个带有变量的 Python 脚本,用于更新 SQLite 数据库的“多”表中的行(UPDATE/INSERT)。

我的 CHILD 表结构如下所示:

FOREIGN KEY instance location
id1 11111. A.
id1. 11111. B.
id1. 22222. C.
id2 33333. A.
id2. 33333. B.
id2. 44444. C.

所以有多个 id 可以有多个实例(重复问题的结果)。我需要在具有相同实例的表中更新或插入多行(批次):例如,实例为 1111 的所有行。

知道我怎样才能完成这项工作吗?删除具有相同实例的所有行并用一批新的(更新的)行替换它们可能有效,但我无法确定我们的 SQL 代码可以工作。

【问题讨论】:

  • 什么不起作用?你有错误吗?
  • 运行脚本时出现此错误:“sqlite3.OperationalError: near "DUPLICATE": syntax error"。
  • SQLite 不支持 ON DUPLICATE KEY UPDATE。使用示例数据和预期结果编辑您的问题以明确说明您想要做什么。
  • 感谢您澄清这一点!我看到了。很高兴知道这样我就不必在那里寻找解决方案了。
  • 那么什么是可靠的解决方案?

标签: python sql sqlite sql-update sql-insert


【解决方案1】:

SQLite 的语法不是 on duplicate(IIRC,这是 MySQL 的语法),而是 on conflict

cur.execute('''INSERT INTO TABLE_CHILD (id, instance, location) VALUES (?,?,?) ON CONFLICT DO UPDATE identifier = TABLE_PARENT.id, instance = TABLE_PARENT.instance''', (id, instance, location))

【讨论】:

  • 似乎不起作用。我收到错误“sqlite3.OperationalError:靠近“标识符”:语法错误”。问题是,例如,我只想用 Table_CHILD 中的实例 '11111' 更新具有 'id1' 的行。正如您在示例表中看到的,Table_CHILD 中的实例与 Table_PARENT 中的实例没有关系(只有 id 有关系)。所以我认为sql应该只适用于Table_CHILD并检查Table_Child中是否存在某个id +实例。如果是这样,那么它需要更新所有这些行。如果没有,那么它应该插入新行。我不是专家...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2010-11-08
  • 1970-01-01
  • 2021-01-04
  • 2017-09-18
  • 2017-12-24
  • 1970-01-01
相关资源
最近更新 更多