我可以把我的电脑扔出窗外......
我想将一个字节字符串保存到我的SQL数据库中的BLOB字段。
例如:
a = 'example' # normal string
b = b'byteexample' # type bytestring
假设我在我的数据库中有一个名为" justatable"一个名为" ablob"的BLOB列我愿意:
sql_a = "INSERT INTO justatest(ablob) VALUES ('%s')" % (a)
sql_b = "INSERT INTO justatest(ablob) VALUES ('%s')" % (b)
执行时:
cursor.execute(sql_a) # works
cursor.execute(sql_b) # doesn't work
为什么MySQLdb会抛出错误?:ProgrammingError:(1064,"您的SQL语法中有错误;请查看与您的MariaDB服务器版本对应的手册,以便在#附近使用正确的语法39; byteexample'')'在第1行")
为什么它适用于普通字符串但不能使用字节串??
答案 0 :(得分:1)
将字节串格式化为字符串时会发生这种情况:
>>> b = b'byteexample'
>>> sql_b = "INSERT INTO justatest(ablob) VALUES ('%s')" % (b)
>>> print(sql_b)
INSERT INTO justatest(ablob) VALUES ('b'byteexample'')
现在你明白为什么它不起作用了?
顺便说一下,你真的 真的不应该使用字符串格式来构造SQL语句。它很容易出现SQL注入。使用适当的mysql库来安全地准备语句。