本文介绍了Sqlite3-提供的绑定数量不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

第一张海报,所以要温柔点。我正在创建一个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()

运行def时,‘table_name’作为参数传递。

我知道以下内容:

如果我不是尝试传递COLUMNS变量,而是在其位置传递每个变量lpmidid、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.

前两行是关于我的列数和列名是否正确的检查。

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

如果您还想提及任何其他代码特定的问题,请不要客气!

谢谢

菲尔

推荐答案

您的代码等同于以下内容:

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)

这篇关于Sqlite3-提供的绑定数量不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:09