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

时间:2011-02-24 23:57:42

标签: 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是来自客户端的SQLite blob和java代码的JSON数据。然后我想用MySQLdb将binData写入MySQL,但是继​​续得到一个TypeError,返回代码为500.关于如何解决这个问题的任何想法。我想将binData存储到MySQL blob中。

1 个答案:

答案 0 :(得分:1)

这里有一堆东西:

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. 如果没有看到你如何构建db表,我不能保证这会起作用。实际上,您是否尝试过创建一个非常简单的数据库表并使用MySQLdb实现插入,这样您就可以熟悉API了?