【问题标题】:Writing blob from SQLite to file using Python使用 Python 将 blob 从 SQLite 写入文件
【发布时间】:2011-03-23 16:35:54
【问题描述】:

毫无头绪的 Python 新手需要帮助。我创建了一个简单的脚本,将二进制文件插入到 SQLite 数据库的博客字段中,这让我感到困惑:

import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
input_note = raw_input(_(u'Note: '))
    input_type = 'A'
    input_file = raw_input(_(u'Enter path to file: '))
        with open(input_file, 'rb') as f:
            ablob = f.read()
            f.close()
        cursor.execute("INSERT INTO notes (note, file) VALUES('"+input_note+"', ?)", [buffer(ablob)])
        conn.commit()
    conn.close()

现在我需要编写一个脚本来获取特定记录的 blob 字段的内容并将二进制 blob 写入文件。在我的例子中,我使用 SQLite 数据库来存储 .odt 文档,所以我想抓取它们并将它们保存为 .odt 文件。我该怎么做?谢谢!

【问题讨论】:

  • 你遇到了什么错误?
  • 没有错误。我只是想弄清楚如何将 blob 字段的内容写入文件。

标签: python sql sqlite binary blob


【解决方案1】:

这是一个读取文件、将其放入数据库、从数据库中读取然后将其写入另一个文件的脚本:

import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()

with open("...", "rb") as input_file:
    ablob = input_file.read()
    cursor.execute("INSERT INTO notes (id, file) VALUES(0, ?)", [sqlite3.Binary(ablob)])
    conn.commit()

with open("Output.bin", "wb") as output_file:
    cursor.execute("SELECT file FROM notes WHERE id = 0")
    ablob = cursor.fetchone()
    output_file.write(ablob[0])

cursor.close()
conn.close()

我用 xml 和 pdf 对其进行了测试,它运行良好。用你的 odt 文件试试看它是否有效。

【讨论】:

  • 谢谢!代码将 blob 保存为文件,但文件似乎已损坏,即应用程序(在我的情况下为 OpenOffice.org Writer)拒绝打开它。我试图保存并提取一个普通的 .txt 文件,但它是空的。难道我做错了什么?谢谢!
  • 对原始文件和保存后加载的文件运行差异工具,看看有什么区别。如果您可以发布您的数据库架构,我也许可以尝试一下。
  • 非常感谢您帮助我。数据库模式很简单:一张表有几个字段。 CREATE_SQL = \ "CREATE TABLE notes (\ id INTEGER PRIMARY KEY UNIQUE NOT NULL,\ note VARCHAR(1024),\ file BLOB,\ tags VARCHAR(256));" cursor.execute(CREATE_SQL) conn.commit() 一旦我可以访问我的机器,我就会尝试运行 diff。谢谢!
  • 我上传了另一个脚本,可以满足您的需求。
猜你喜欢
  • 2012-09-01
  • 2014-09-09
  • 2013-12-26
  • 2018-11-28
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2018-08-13
相关资源
最近更新 更多