我有这个简单的代码,我无法工作。
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代码(连接和普通插入)可以工作,但是当我想要你做你上面看到的事情时问题就会出现。
我想要实现的目标是让用户将数据插入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样式”占位符,它从其后面的参数列表中获取实际值。