将二进制数据保存到MySQLdb Python

2024-10-01 07:13:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在谷歌上搜索了这个网站,但没有具体的出现,不能让这个工作。代码如下:

    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中。在


Tags: 代码sql网站mysqlfilenameblobattachmysqldb
1条回答
网友
1楼 · 发布于 2024-10-01 07:13:09

这里有很多东西:

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?在

相关问题 更多 >