在BLOB字段中保存字节字符串的问题(python,mysqldb)

时间:2018-04-11 15:25:11

标签: python sql mysql-python

我可以把我的电脑扔出窗外......

我想将一个字节字符串保存到我的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行")

为什么它适用于普通字符串但不能使用字节串??

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库来安全地准备语句。