2010-07-31 207 views
12

一位無知的Python新手需要幫助。使用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字段的內容,並寫入腳本:我通過創建一個簡單的腳本插入一個二進制文件到一個博客領域的SQLite數據庫糊塗二進制blob到文件。在我的情況下,我使用SQLite數據庫來存儲.odt文件,所以我想抓取並保存爲.odt文件。我該如何解決這個問題?謝謝!

+0

你得到的錯誤是什麼? – nosklo 2010-07-31 18:27:01

+0

沒有錯誤。我只想弄清楚如何將blob字段的內容寫入文件。 – dmpop 2010-07-31 18:29:28

回答

28

這裏,它讀取文件的腳本,把它的數據庫,從數據庫中讀出,然後將其寫入到另一個文件:

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文件試試看看它是否有效。

+0

謝謝!代碼將blob保存爲文件,但該文件似乎已被損壞,即應用程序(本例中爲OpenOffice.org Writer)拒絕將其打開。我試圖保存並提取一個普通的.txt文件,但它是空的。難道我做錯了什麼?謝謝! – dmpop 2010-08-02 15:39:12

+0

在原始文件和已保存然後加載的文件上運行diff工具以查看有什麼區別。如果你可以發佈你的數據庫模式,我可以嘗試一下。 – 2010-08-02 20:15:05

+0

非常感謝你幫助我。數據庫模式很簡單:一個表中有幾個字段。 \t CREATE_SQL = \ \t \t「CREATE TABLE筆記(\ \t \t ID INTEGER PRIMARY KEY UNIQUE NOT NULL,\ \t \t注VARCHAR(1024),\ \t \t文件BLOB,\ \t \t標籤VARCHAR( 256));」 \t cursor.execute(CREATE_SQL) \t conn.commit() 我會盡快在我訪問我的機器時運行diff。謝謝! – dmpop 2010-08-02 20:29:11