Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben (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 von FisiMona
Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...