[英]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.