QR-Code direkt in Datenbank speichern

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
DMD-OL
User
Beiträge: 141
Registriert: Samstag 26. Dezember 2015, 16:21
Wohnort: Oldenburg (Oldenburg)

QR-Code direkt in Datenbank speichern

Beitragvon DMD-OL » Montag 13. Februar 2017, 20:10

hi
ich habe hier einen code, mit dem qr-codes in eine sql-datenbank gespeichert werden können(glaub ich :)).
  1.         desktopFile = os.path.expanduser("~\Desktop")
  2.         path_grund = desktopFile+'\\Probeordner\\SYSTEM'
  3.         folderpath = path_grund+'\\QR-Codes'
  4.         path_qr = path_grund+'\\QR-Datenbank'
  5.  
  6.         try:
  7.             os.makedirs(path_qr)
  8.             os.makedirs(folderpath)
  9.         except:
  10.             pass
  11.  
  12.         qr_text = self.qrPhotoTxt.GetValue()
  13.         qr = qrcode.QRCode(version=1, box_size=10, border=4)
  14.         qr.add_data(self.qrDataTxt.GetValue())
  15.         qr.make(fit=True)
  16.         x = qr.make_image()
  17.         qr_file = os.path.join(folderpath, self.qrPhotoTxt.GetValue() + ".png")
  18.         img_file = open(qr_file, 'wb')
  19.         x.save(img_file, 'PNG')
  20.         img_file.close()
  21.  
  22.         with open(qr_file, 'rb') as input_file:
  23.  
  24.             ablob = input_file.read()
  25.             base=os.path.basename(qr_file)
  26.             afile, ext = os.path.splitext(base)
  27.             SQL_QR = '%s\\QR_Codes.db'  %(path_qr)
  28.             conn = sqlite3.connect(SQL_QR)
  29.             cursor = conn.cursor()
  30.             sql = '''CREATE TABLE IF NOT EXISTS QR_Codes(
  31.            ID INTEGER PRIMARY KEY AUTOINCREMENT,
  32.            PICTURE BLOB,
  33.            TYPE TEXT,
  34.            FILE_NAME TEXT);'''
  35.             conn.execute(sql)
  36.             sql = '''INSERT INTO QR_Codes
  37.           (PICTURE, TYPE, FILE_NAME)
  38.            VALUES(?, ?, ?);'''
  39.             conn.execute(sql,[sqlite3.Binary(ablob), ext, afile])
  40.             conn.commit()
  41.             sql = "SELECT PICTURE, TYPE, FILE_NAME FROM QR_Codes WHERE FILE_NAME = :FILE_NAME"
  42.             param = {'FILE_NAME': afile}
  43.             cursor.execute(sql, param)
  44.             ablob, ext, afile = cursor.fetchone()
  45.             filename = afile + ext
  46.             with open(filename, 'wb') as output_file:
  47.                 output_file.write(ablob)
  48.  
  49.             conn.close()
  50.         self.showQRCode(qr_file)


ich möchte aber das image direkt in die datenbank einspeichern ohne es vorher mit:

  1.         img_file = open(qr_file, 'wb')
  2.         x.save(img_file, 'PNG')
  3.         img_file.close()

abspeichern zu müssen.
geht das auch?
sonst ist es ja doppelt gespeichert :(
Zuletzt geändert von Anonymous am Dienstag 14. Februar 2017, 00:03, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 6265
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: QR-Code direkt in Datenbank speichern

Beitragvon Sirius3 » Montag 13. Februar 2017, 20:31

@DMD-OL: Pfade sollte man mit os.path.join zusammensetzen. Nackte excepts vermeiden. Beim Schreiben solltest Du auch das with-Statement benutzen. Man kann auch das Schreiben vermeiden, wenn man BytesIO verwendet. Der with-Block beim Lesen geht ungefähr 24 Zeilen zu weit. Das Erzeugen der Tabelle hat an dieser Stelle nichts verloren. Was ist der Sinn, das, was Du gerade in die Datenbank geschrieben hast, gleich wieder auszulesen?

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder