FisiMona Geschrieben 20. Mai 2010 Teilen Geschrieben 20. Mai 2010 Hallo erstmal, ich habe folgendes Problem, ich möchte eine Datei (in meinem Fall eine *.log-Datei) in eine Oracle-Datenbank als BLOB einfügen. Leider habe ich keine Idee, wie ich das anstellen soll. Hab schon mehrere Stunden gegoogelt, aber nichts gefunden. Liegt möglicherweise auch daran, dass ich mich mit Oracle kaum auskenne Ich habe eine DB mit der Tabelle LOGBACKUP... in dieser Tabelle gibt es die Spalte 'LogContent' mit dem Datentyp 'BLOB' dorthinein möchte ich die Datei 'backup.log' speichern. Als Programmiersprache benutze ich 'Python' (ist so vorgegeben) Ich hoffe es kann mir jemand helfen, denn ich komme nicht weiter. Danke. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 20. Mai 2010 Teilen Geschrieben 20. Mai 2010 Hi, ich kenn zwar wiederum Python nicht, aber die Schritte, die dazu in Java nötig sind kann ich Dir aufzeigen, evtl. geht das analog auch so in Phython: 1. Voraussetzung: Vorhandener Datensatz mit einem BLOB Feld das einen gültigen Lob Locator besitzt (also EMPTY_BLOB falls nichts drinnen ist, nicht aber NULL!). 2. Select ... for update und sich den Lob Locator in ein eentsprechendes Objekt laden. In Java würde man das über ein ResultSet machen. 3. Sich über die Methoden des Blob Objektes einen Outputstream holen und dort den Inhalt der datei reinschreiben. 4. Commit Vielleicht ist hier auch was interessantes für Dich dabei. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FisiMona Geschrieben 21. Mai 2010 Autor Teilen Geschrieben 21. Mai 2010 (bearbeitet) hm also das hier hab ich mal gemacht... meinst du das so? Aber weiter komme ich nicht, da ich auch nicht viel mehr als die Grundlagen im Programmieren beherrsche self.__dbServer = myserver #Bsp. self.__dbDataBase = mydatabase #Bsp. #Verbindung zur Datenbank conn = pyodbc.connect("driver={SQL Server};server=%s;database=%s" % (self.__dbServer, self.__dbDataBase)) cursor = conn.cursor() #Einfuegen des Empty-BLOB cursor.execute(""" Insert into LOGBACKUP (LOGCONTENT) values ('%s') """ % (EMPTY_BLOB()) ) conn.commit(); cursor.execute("Select LOGCONTENT from LOGBACKUP for update") Bearbeitet 21. Mai 2010 von FisiMona Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FisiMona Geschrieben 27. Mai 2010 Autor Teilen Geschrieben 27. Mai 2010 ok... also das ich eine Datei in meine DB schreiben kann, hab ich nun hinbekommen. Das jetzige problem ist aber, das ich mehrere Dateien bzw. ganze Verzeichnisse in die Datenbank speichern möchte. Nehme ich einzelne Files, z.B. Bild.jpg und es liegt auf C:\ gibt es keine probleme.. aber sobald es z.B. ein gezippter Ordner ist oder eine Datei die einen tiefergehenden Pfad hat als C:\ klappt es nicht... --> no such file or directory obwohl es vorhanden ist. Hier mein Code: import abcaccess def insertTrace (): "See self.insertTrace" fileName = "C:\testordner\SchichtRawData.dqy" #Insert data with a empty LOB abcaccess.execSql(""" INSERT INTO LOGBACKUP (DATACLASS, LOGCONTENT, LOGSIZE) VALUES (:dataclass, EMPTY_BLOB(), :logSize) """, dataclass='B', logSize = float (os.path.getsize (fileName))) ergSql = abcaccess.execSelectOne ( "select max(id) FROM LOGBACKUP" ) if ergSql != None and ergSql[0] != None: logContentId = ergSql[0] #Select the LOB from the database lobRow = abcaccess.execSelectOne (""" SELECT LOGCONTENT FROM LOGBACKUP WHERE ID = :id FOR UPDATE """, id = logContentId) #copy the file into the database lobRow[0].loadFileBufferedIntoLob (fileName, compressed = True) if __name__ == "__main__": insertTrace() Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.