Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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.

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.