我用谷歌搜索并搜索了这个网站,但没有找到任何具体内容,也无法正常工作。这是代码:
binData = ''.join(map(lambda x: chr(x % 256), attach.attcoll))
sql_stmt = """INSERT INTO attachments (attno,filename,fileextension,projNo,procNo,wpattachment) \
VALUES ('%s','%s','%s','%s','%s','%s') ON DUPLICATE KEY UPDATE filename='%s',fileextension='%s'""", attach.attno,\
attach.filename,attach.fileextension,attach.projNo,attach.procNo,binData,attach.filename,attach.fileextension
try:
cursor.execute(MySQLdb.escape_string(sql_stmt))
conn.commit()
attach.attcoll 是通过 JSON 从客户端的 SQLite blob 和 java 代码传入的数据。然后我想用 MySQLdb 将 binData 写入 MySQL,但不断收到 TypeError 和 500 的返回码。关于如何解决这个问题的任何想法。我想将 binData 存储到 MySQL blob 中。
最佳答案
这里有一堆东西:
binData = ''.join(map(lambda x: chr(x % 256), attach.attcoll))
sql_stmt = """INSERT INTO attachments (attno,filename,fileextension,projNo,procNo,wpattachment)
VALUES (%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE filename=%s,fileextension=%s"""
params = (attach.attno,attach.filename,attach.fileextension,attach.projNo,attach.procNo,binData,attach.filename,attach.fileextension)
cursor.execute(sql_stmt, params)
conn.commit()
总结:
- 确保您首先连接到数据库(如果您不知道如何连接,请阅读 MySQLdb 文档)
- 您不想转义整个查询,只转义数据部分,将语句和数据分别传递给
cursor.execute()
意味着游标将为您转义。 - 不要引用你的
'%s'
,MySQLdb 也会为你做这件事。 - 您的数据库是事务性的(即 InnoDB)吗,这就是您使用
conn.commit()
的原因,如果您不使用事务性引擎,则没有必要。 - 在没有看到您如何构建数据库表的情况下,我无法保证这会奏效。作为练习,您是否尝试过创建一个非常简单的数据库表并练习使用 MySQLdb 向其中插入数据,以便熟悉 API?
关于python - 将二进制数据保存到 MySQLdb - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112072/