我在从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”符号替换新行。
答案 0 :(得分:1)
如果元组包含带换行符的字符串以查看差异,则只需要查看元组的打印方式:
def request_params
因此,我们在一个案例中看到,该字符串将使用' \ n'而在另一种情况下,它会有换行符。
话虽如此,无论如何,这不太可能是正确的方法。您已经打开了自己的SQL注入。你最好离开:
>>> print(("foo\nbar",))
('foo\nbar',)
>>> print("foo\nbar")
foo
bar
答案 1 :(得分:1)
str()
根据Python语法规则格式化其参数,因此它永远不适合SQL。
要防止格式化问题(和SQL注入攻击),请使用参数:
m.execute("INSERT INTO transactions VALUES (?,?,?,?,?,?,?)",
(timestamp, address, recipient_input, amount_input,
signature_enc, public_key_readable, openfield_input))