【问题标题】:Python SQlite3 insert with paramsPython SQlite3 插入参数
【发布时间】:2015-02-13 07:19:14
【问题描述】:

问题:

我在使用 python 将数据插入 SQlite 时遇到问题。目前我是 python 新手,所以这一定是初学者的错误。

错误:

OperationalError:无法识别的令牌:“{”

我尝试过的:

我已经阅读了许多教程并尝试了许多选项,如下面的代码示例所示。但由于某种原因,我无法让它在没有错误的情况下正常工作。

一些例子:

cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES ({tmdb_id}, {name}, {year})".format(
        tmdb_id=str(data['id']), name=str(data['title']), year=str(data['release_date']).split('-')[0]))

cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES ({tmdb_id}, {name}, {year})", {
        "tmdb_id": str(data['id']), "name": str(data['title']), "year": str(data['release_date']).split('-')[0]})
    conn.commit()

问题:

有人可以帮我用 SQlite3 以 Python 的方式正确插入一行吗?

【问题讨论】:

  • 第二个例子中具体的错误是缺少**解包字典。但是,请阅读docs.python.org/2/library/sqlite3.html 并且不要使用str.format 插入变量!
  • 我阅读了大约 10 个教程,但没有阅读文档。谢谢
  • 请添加为答案。所以我可以接受

标签: python python-2.7 sqlite


【解决方案1】:

除了pythonic方式之外,还有sqlitic方式

来自docs

改为使用 DB-API 的参数替换。将 ? 作为占位符放在要使用值的任何位置,然后将值的元组作为第二个参数提供给游标的 execute() 方法。

你的一个例子可以通过使用来解决

values = (data['id'],data['title'],data['release_date'])
cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES (?, ?, ?)",values)

【讨论】:

  • 正如 Python 数据库 API 规范 v2.0 所提到的,? 占位符也可以从模块的 paramstyle 全局中找到,即 sqlite3.paramstyle'qmark'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多