[英]can't insert data into sqlite3 using python
我可以使用Python在sqlite3数据库中成功创建表,但无法向其中插入数据
# coding: utf-8
import sqlite3
text = "Welcome"
def cur_execute(data):
con = sqlite3.connect('sqlite3.db')
try:
with con:
cur = con.cursor()
cur.execute(data)
con.commit()
except Exception as why:
print(why)
finally:
if con: con.close()
cur_execute("CREATE TABLE Hello(test TEXT)")
cur_execute("INSERT INTO Hello VALUES(?)", (text))
向我展示此错误:cur_execute()恰好接受1个参数(给定2个)
谢谢。
@zoosuck答案有效,但是它也删除了为库内置的sql卫生设施。 您可以通过执行以下操作来使用内置的sql清理:
import sqlite3
text = "Welcome"
def cur_execute(data, args=()):
con = sqlite3.connect('sqlite3.db')
with con:
cur = con.cursor()
cur.execute(data, args)
con.commit()
cur_execute("CREATE TABLE Hello(test TEXT)")
cur_execute("INSERT INTO Hello VALUES(?)", (text, ))
请注意,使用with
语句不需要关闭连接。 如果发生错误,我删除了连接周围的try catch以显示完整的错误。
此外,您的原始代码存在问题。 cur_execute("INSERT INTO Hello VALUES(?)", (text))
的第二个参数必须是一个元组/列表。
你可以这样
# coding: utf-8
import sqlite3
text = "Welcome"
def cur_execute(data, *args):
con = sqlite3.connect('sqlite3.db')
with con:
cur = con.cursor()
cur.execute(data, args)
con.commit()
cur_execute("CREATE TABLE Hello(test TEXT)")
cur_execute("INSERT INTO Hello VALUES(?)", text)
这样,您可以保留cur.execute的功能来转义输入数据。 这样可以防止SQL注入攻击。
如果要在表中添加2件事,则可以像这样调用函数。
cur_execute("CREATE TABLE Hello2(test1 TEXT, test2 TEXT)")
cur_execute("INSERT INTO Hello2 VALUES(?, ?)", text, "stuff")
它将创建另一个带有2个文本字段的表。 那是你要做什么吗?
cur_execute
您已将cur_execute
函数定义为仅接受一个参数,然后尝试向其传递两个参数。
但是,他的方法仍然容易受到sql注入的影响-您应该让数据库API处理字符串格式。 您希望能够将两个参数传递给函数,而不仅仅是一个。 您可以尝试:
import sqlite3
data = "Welcome"
def cur_execute(data,*args):
con = sqlite3.connect('sqlite3.db')
try:
with con:
cur = con.cursor()
if args is not None:
cur.execute(data,args)
else:
cur.execute(data)
con.commit()
except Exception as why:
print(why)
finally:
if con: con.close()
cur_execute("CREATE TABLE Hello(test TEXT)")
cur_execute("INSERT INTO Hello VALUES(?)", (data))
该函数带有一个参数:SQL(字符串类型),第二个调用给它两个参数,只需更改代码以格式化SQL即可:
import sqlite3
data = "Welcome"
def cur_execute(data):
con = sqlite3.connect('sqlite3.db')
try:
with con:
cur = con.cursor()
cur.execute(data)
con.commit()
except Exception as why:
print(why)
finally:
if con: con.close()
cur_execute("CREATE TABLE Hello(test TEXT)")
cur_execute("INSERT INTO Hello VALUES('{0}')".format(data)) # format sql and call it
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.