我有一个长字符串,我想保存到SQlite数据库中(使用带有Python 3.5的sqlite3模块)。它工作正常,直到字符串大约500,000个字符。如果它变得比失败更长:
Traceback (most recent call last):
[...]
sqlite3.OperationalError: near "SomeWord": syntax error
我的代码:
cursor.execute("UPDATE data SET raw_str='{}' WHERE id=1".format(long_string))
connection.commit()
我的字符串是一个长度约为6密耳的原始数据字符串。即便如此,我希望能够处理更大的数据(大10到100倍)。
答案 0 :(得分:2)
我可以按如下方式重现您的错误消息。请注意,long_string
最终会包含单引号字符。
import json, sqlite3
db = sqlite3.connect('tmp.sqlite3')
cursor = db.cursor()
cursor.execute("create table data (raw_str STRING, id INT)")
long_string = json.dumps(["' SomeWord"])
cursor.execute("Update data SET raw_str='{}' where id=1".format(long_string))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "SomeWord": syntax error
cursor.execute("Update data SET raw_str=? where id=1", [long_string])
# works
您不应使用str.format
将字符串数据替换为SQL查询。似乎发生的事情是您的数据包含单引号字符,因此您不小心对自己进行了SQL注入攻击。
幸运的是,字符串不包含'; drop table data; --
。