我有一个简单的代码,我无法工作。
import sqlite3
conn = sqlite3.connect('db\books')
c = conn.cursor()
col = []
title = input('title')
text = input('text')
tags = input('tags')
col.append(title)
col.append(text)
col.append(tags)
c.executescript("INSERT INTO books (title,text,tags) "
"VALUES (col[0],col[1],col[2])")
db代码(连接和正常插入)有效,但是当我想执行您在上面看到的操作时,问题就会出现。
我想实现的目标是让用户将数据插入数据库(所有字符串)。我不知道这是否是正确的方法...
我该怎么做?
谢谢
一种选择是将最后一行更改为:
c.execute("INSERT INTO books (title,text,tags) VALUES (?,?,?)", (col[0], col[1], col[2]))
然后提交并关闭连接(如果已完成更改):
conn.commit()
conn.close()
这一行:
c.executescript("INSERT INTO books (title,text,tags) "
"VALUES (col[0],col[1],col[2])")
不是有效的 SQL。现在,由于c
被定义为游标,因此您可以直接从它运行execute
而不是executescript
,后者假设从连接创建游标并执行SQL。只需将该行替换为以下内容即可:
c.execute("INSERT INTO books (title,text,tags) "
"VALUES (?,?,?)", col)
上面的 SQL 使用"qmark 样式"占位符,它从它后面的参数列表中获取实际值。