第一次海报如此温柔。我正在创建一个查看表的列的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时作为参数传递。
我知道以下内容:
如果我不是尝试传递columns变量,而是将每个变量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.
前两行是我检查的事实,即我有正确的列数和这些列的名称。
关于哪里出错的任何想法。我有一种感觉,它可能与提取的列的格式有关,但我看不出我需要做什么才能让它运行而不会出错!
如果您想提及任何其他特定于代码的问题,请对此进行相当新的尝试!
由于
菲尔
答案 0 :(得分:0)
您的代码相当于以下内容:
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)