【问题标题】:sqlite3 - Incorrect number of bindings suppliedsqlite3 - 提供的绑定数量不正确
【发布时间】:2016-02-10 04:52:05
【问题描述】:

第一次海报所以要温柔。我正在创建一个 def 来查看表的列,然后找到该表的列名。然后它使用这些列名来帮助构建 INSERT 语句以将数据放入该表中。

我已经检查了该站点上的其他一些查询,因为这似乎是一个通用类型问题,但是找不到与此相关的任何内容。

代码如下:

    sqlite_file = 'pmi.db'
    db = sqlite3.connect(sqlite_file)
    cur = db.cursor()

    cur.execute('PRAGMA TABLE_INFO({})'.format(table_name))
    columns = [tblcols[1] for tblcols in cur.fetchall()]
    print(columns) # for testing
    print(len(columns)) # for testing

    lpmid_id = 2
    pmname = "Test"
    pmpertbl = "An"

    cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])

    db.commit()

'table_name' 在运行 def 时作为参数传递。

我知道以下几点:

如果我不尝试传递列变量,而是传递每个变量 lpmid_id、pmname、pmpertbl,然后查询发布时不会出错。

当我使用变量 'columns' 执行此操作时,会发生以下错误

>>> sqlts("lpmid")
['id', 'pmname', 'pmpertbl']
3
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    sqlts("lpmid")
  File "C:/Python35/Programs/SQLTest.py", line 27, in sqlts
    raise e
  File "C:/Python35/Programs/SQLTest.py", line 21, in sqlts
    cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 1 supplied.

前两行是我检查我是否拥有正确的列数和这些列的名称。

关于哪里出错的任何想法。我有一种感觉,这可能与提取列的格式有关,但我看不出我需要做什么才能让它正常运行!

如果您有任何其他代码特定问题,请随意提及!

谢谢

菲尔

【问题讨论】:

  • 您正在传递要执行的列表列表,而它需要一个元组。删除执行调用中的方括号就足够了。

标签: python-3.x sqlite sql-insert


【解决方案1】:

您的代码相当于以下代码:

columns = [1, 2.3, 'xxx']
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [columns])

与此相同:

cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', [[1, 2.3, 'xxx']])

这是一个列表,其第一个(也是唯一的)元素是一个列表。

execute() 需要一个简单的列表:

columns = [...]
cur.execute('INSERT INTO ' + table_name + ' VALUES(?,?,?)', columns)

【讨论】:

  • 谢谢。我试过这个并得到以下错误 ('INSERT INTO ' + table_name + ' VALUES(?,?,?)', columns) sqlite3.IntegrityError: datatype mismatch
猜你喜欢
  • 2015-12-06
  • 2013-10-28
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
  • 2021-05-30
  • 2020-09-10
相关资源
最近更新 更多