[英]Inconsistent SQLite3 insert from Python 2.7
我從Python將值插入SQLite3數據庫時遇到問題。 以下代碼以不同的方式插入新行。
m.execute("INSERT INTO transactions VALUES "+str((timestamp,address,recipient_input,amount_input,signature_enc,public_key_readable,openfield_input))+"")
m.execute("INSERT INTO transactions VALUES ('" + str(timestamp) + "','" + str(address) + "','" + str(recipient_input) + "','" + str(amount_input) + "','" + str(signature_enc) + "','" + str(public_key_readable) + "','" +str(openfield_input) + "')")
第二個示例將新行正確插入SQLite數據庫,第一個示例插入“ \\ n”符號。 有什么解釋嗎? 我想使用第一個使用元組的模型,但不使用“ \\ n”符號替換新行。
如果元組包含帶換行符的字符串,則只需查看元組的打印方式即可看出區別:
>>> print(("foo\nbar",))
('foo\nbar',)
>>> print("foo\nbar")
foo
bar
因此,我們看到在一種情況下,字符串將以'\\ n'格式化,而在另一種情況下,它將具有換行符。
話雖如此,這無論如何都不是正確的方法。 您已經准備好接受SQL注入。 您最好:
values = (
timestamp,
address,
recipient_input,
amount_input,
signature_enc,
public_key_readable,
openfield_input,
)
m.execute("INSERT INTO transactions VALUES (?,?,?,?,?,?,?)", values)
str()
根據Python語法規則設置其參數格式,因此它永遠不適用於SQL。
為防止格式問題(和SQL注入攻擊),請使用參數:
m.execute("INSERT INTO transactions VALUES (?,?,?,?,?,?,?)",
(timestamp, address, recipient_input, amount_input,
signature_enc, public_key_readable, openfield_input))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.