Zum Inhalt springen

Datei (backup.log) in Oracle-DB als BLOB (via Python)


FisiMona

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von FisiMona
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...