2010-07-31 5 views
12

का उपयोग करके 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() 

अब मैं एक स्क्रिप्ट है कि एक विशेष रिकॉर्ड के ब्लॉब फ़ील्ड की सामग्री पकड़ लेता है और लिखते हैं लिखने की ज़रूरत: मैं एक सरल स्क्रिप्ट है कि एक SQLite डेटाबेस में एक ब्लॉग के क्षेत्र में एक बाइनरी फ़ाइल सम्मिलित करता है बनाने के माध्यम से अव्यवस्थित एक फ़ाइल में बाइनरी ब्लॉब। मेरे मामले में, मैं .odt दस्तावेज़ों को संग्रहीत करने के लिए SQLite डेटाबेस का उपयोग करता हूं, इसलिए मैं उन्हें .odt फ़ाइलों के रूप में पकड़ना और सहेजना चाहता हूं। मैं उसे करके देखूं तो? धन्यवाद!

+0

आपको क्या त्रुटि मिल रही है? – nosklo

+0

कोई त्रुटि नहीं। मैं सिर्फ एक फ़ाइल में एक ब्लॉब फ़ील्ड की सामग्री लिखने के बारे में जानना चाहता हूं। – dmpop

उत्तर

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 और यह काम किया पूरी तरह से। इसे अपनी ओडीटी फ़ाइल से आज़माएं और देखें कि यह काम करता है या नहीं।

+0

धन्यवाद! कोड ब्लॉब को फ़ाइल के रूप में सहेजता है, लेकिन फ़ाइल क्षतिग्रस्त प्रतीत होती है, यानी, एप्लिकेशन (मेरे मामले में OpenOffice.org राइटर) इसे खोलने से इंकार कर देता है। मैंने एक सादा .txt फ़ाइल को सहेजने और निकालने का प्रयास किया, लेकिन यह खाली हो गया। क्या मुझसे कुछ गलत हो रही है? धन्यवाद! – dmpop

+0

मूल फ़ाइल पर एक diff टूल चलाएं और सहेजे गए और फिर लोड किए गए एक को यह देखने के लिए कि अंतर क्या हैं। यदि आप अपनी डीबी स्कीमा पोस्ट कर सकते हैं, तो मैं इसे आज़मा सकता हूं। –

+0

मेरी मदद करने के लिए बहुत बहुत धन्यवाद। डेटाबेस स्कीमा सरल है: एक टेबल कुछ मुट्ठी भर फ़ील्ड। \t CREATE_SQL = \ \t \t "टेबल नोट बनाने (\ \t \t आईडी पूर्णांक प्राथमिक कुंजी अनन्य नहीं NULL, \ \t \t टिप्पणी VARCHAR (1024), \ \t \t फ़ाइल ब्लॉब, \ \t \t टैग VARCHAR (256)); " \t cursor.execute (CREATE_SQL) \t conn.commit() जैसे ही मुझे अपनी मशीन तक पहुंच है, मैं diff चलाने की कोशिश करूंगा। धन्यवाद! – dmpop