python - 将二进制数据保存到 MySQLdb - Python

标签 python mysql binary 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'""", 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()

总结:

  1. 确保您首先连接到数据库(如果您不知道如何连接,请阅读 MySQLdb 文档)
  2. 您不想转义整个查询,只转义数据部分,将语句和数据分别传递给 cursor.execute() 意味着游标将为您转义。
  3. 不要引用你的'%s',MySQLdb 也会为你做这件事。
  4. 您的数据库是事务性的(即 InnoDB)吗,这就是您使用 conn.commit() 的原因,如果您不使用事务性引擎,则没有必要。
  5. 在没有看到您如何构建数据库表的情况下,我无法保证这会奏效。作为练习,您是否尝试过创建一个非常简单的数据库表并练习使用 MySQLdb 向其中插入数据,以便熟悉 API?

关于python - 将二进制数据保存到 MySQLdb - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112072/

相关文章:

python - 如何使用颜色图为 Pandas DataFrames 的绘图着色

php - 使用加载程序显示/隐藏 php mysql 结果

google-chrome - 从浏览器发送二进制数据

javascript - 如何通过 Javascript 中的一元运算符将数字转换为字符串?

python - 将列表中的唯一值聚合到新列表

python - 如何使用 Pyramid(Python 框架)模拟 mod_rewrite 的 url 别名功能?

python - 根据行值使用其他列的名称填充新的 pandas 数据框列

PHP mySQL 不允许我插入到表中

mysql - TYPO3 和 MySQL 数据库在不同的服务器上

Java:二分搜索实现无法使用延迟相等检测来工作