【问题标题】:SQL insert query through python loop通过python循环的SQL插入查询
【发布时间】:2019-01-27 20:04:14
【问题描述】:

我正在尝试使用以下代码在 python 中使用 for 循环将多行插入到表中:

ID = 0
values = ['a', 'b', 'c']
for x in values:
   database.execute("INSERT INTO table (ID, value) VALUES (:ID, :value)",
                     ID = ID, value = x)
   ID += 1

我预期会发生的是,这段代码会在我的表中插入三行。唯一的问题是它只执行一次查询。所以我只会得到行“0,'a'”。

没有弹出任何错误消息,只是没有用其他两个值更新表。然而奇怪的是,我可以通过使用多个查询来规避这个问题,如下所示:

ID = 0
values = ['a', 'b', 'c']
for x in values:
   database.execute("INSERT INTO table (ID) VALUES (:ID)", ID = ID)
   database.execute("INSERT INTO table (value) VALUES (:value)", value = x)
   ID += 1

虽然这会更新我的代码,但当我将列添加到表的更下方时,此方法会变得更加乏味。有谁知道为什么第一个 sn-p 代码不起作用而第二个代码起作用?

【问题讨论】:

  • 您并没有真正将“值”添加到与“ID”相同的行中,你知道的。
  • 我不是 100% 确定,但是您是否从 Python 提交了查询?我相信默认情况下 SQLite 是自动提交的,但也许你可以检查一下。

标签: python sqlite loops


【解决方案1】:

execute method 将数组作为第二个参数。

执行(sql[,参数])

执行一条 SQL 语句。 SQL 语句可以是参数化的(即占位符而不是 SQL 文字)。 sqlite3 模块 支持两种占位符:问号(qmark 风格)和 命名占位符(命名样式)。

这应该可行:

database.execute("INSERT INTO table (ID, value) VALUES (:ID, :value)", [ID , x])

您可能想在文档中调查executemany

来自同一个文档:

提交()

此方法提交当前事务。如果您不调用此方法,则自上次调用 commit() 以来所做的任何事情都不会 从其他数据库连接可见。如果你想知道为什么不 查看您已写入数据库的数据,请检查您没有 忘记调用这个方法。

您可能想在文档中调查executemany

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 2014-09-29
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多