2010-07-31 30 views
12

Một người mới sử dụng Python không cần thiết phải cần trợ giúp. Tôi lộn xộn thông qua việc tạo một kịch bản đơn giản mà chèn một tập tin nhị phân vào một lĩnh vực blog trong một cơ sở dữ liệu SQLite:Viết blob từ SQLite vào tập tin bằng cách sử dụng Python

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() 

Bây giờ tôi cần phải viết một kịch bản mà grabs các nội dung của lĩnh vực blob của một hồ sơ cụ thể và viết các blob nhị phân vào một tệp. Trong trường hợp của tôi, tôi sử dụng cơ sở dữ liệu SQLite để lưu trữ tài liệu .odt, vì vậy tôi muốn lấy và lưu chúng dưới dạng tệp .odt. Làm thế nào để tôi đi về điều đó? Cảm ơn!

+0

lỗi bạn đang gặp phải là gì? – nosklo

+0

Không có lỗi. Tôi chỉ muốn tìm ra cách viết một nội dung của một trường blob vào một tập tin. – dmpop

Trả lời

28

Dưới đây là một kịch bản mà đọc một tập tin, đặt nó trong cơ sở dữ liệu, đọc nó từ cơ sở dữ liệu và sau đó viết nó vào tập tin khác:

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() 

Tôi đã thử nghiệm nó với một xml và một pdf và nó làm việc hoàn hảo. Hãy thử nó với tập tin odt của bạn và xem nếu nó hoạt động.

+0

Cảm ơn bạn! Mã tiết kiệm blob dưới dạng tệp nhưng tệp có vẻ bị hỏng, tức là ứng dụng (OpenOffice.org Writer trong trường hợp của tôi) từ chối mở tệp đó. Tôi đã cố gắng lưu và giải nén một tệp .txt đơn giản, nhưng nó trống rỗng. Tôi có làm điều gì sai? Cảm ơn! – dmpop

+0

Chạy công cụ tìm khác biệt trên tệp gốc và tệp được lưu và tải sau đó để xem sự khác biệt là gì. Nếu bạn có thể đăng lược đồ db của mình, tôi có thể thử nó. –

+0

Cảm ơn bạn rất nhiều vì đã giúp tôi. Lược đồ cơ sở dữ liệu rất đơn giản: một bảng một số trường. \t CREATE_SQL = \ \t \t "CREATE TABLE ghi chú (\ \t \t id INTEGER PRIMARY KEY UNIQUE NOT NULL, \ \t \t lưu ý VARCHAR (1024), \ \t \t tập tin BLOB, \ \t \t thẻ VARCHAR (256)); " \t cursor.execute (CREATE_SQL) \t conn.commit() Tôi sẽ cố gắng chạy khác ngay khi tôi có quyền truy cập vào máy của mình. Cảm ơn! – dmpop

Các vấn đề liên quan