Python 2.7中插入的SQLite3不一致

时间:2016-11-04 15:30:10

标签: python python-2.7 sqlite newline

我在从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”符号替换新行。

2 个答案:

答案 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))