mysqldb Objekt
Verfasst: Dienstag 2. September 2014, 18:28
Hey Leute,
ich bin begeisteter RaspberryPi-Bastler und hantiere in dem Zusammenhang viel mit MySQL-Datenbanken. Als Schnittstelle zur Datenbank verwende ich das [url=http://mysql-python.sourceforge.net/MyS ... qldb-Modul[/url]. Um mit den Umgang mit dem Modul zu erleichtern habe ich mir ein eigenes Skript geschrieben, in dem ich ein Objekt für den schnellen Datenbankeintrag gebaut habe. Dieses Skript würde ich gerne der RaspberryPi-Community zur Verfügung stellen. Bevor das geschieht wollte ich es hier allerdings nochmal prüfen lassen, ob man etwas beser machen kann. Mit besser meine ich keinen schöneren Programmierstil, sondern wirklich essentielle Dinge, die aus funktionalen Gründen ergänzt bzw. geändert werden sollten.
Ich bin mir darüber im klaren, dass ich noch ein wenig mehr Error-Handling betreiben muss, aber verstehe nicht ganz wo und wie ich da rangehen soll. Z.B. "KeyboardInterrupt" abfangen hat nicht wirklich funtkioniert. Weiß aber nicht warum. Hier auf jeden Fall mal der Code. Vielen Dank für Feedback!
ich bin begeisteter RaspberryPi-Bastler und hantiere in dem Zusammenhang viel mit MySQL-Datenbanken. Als Schnittstelle zur Datenbank verwende ich das [url=http://mysql-python.sourceforge.net/MyS ... qldb-Modul[/url]. Um mit den Umgang mit dem Modul zu erleichtern habe ich mir ein eigenes Skript geschrieben, in dem ich ein Objekt für den schnellen Datenbankeintrag gebaut habe. Dieses Skript würde ich gerne der RaspberryPi-Community zur Verfügung stellen. Bevor das geschieht wollte ich es hier allerdings nochmal prüfen lassen, ob man etwas beser machen kann. Mit besser meine ich keinen schöneren Programmierstil, sondern wirklich essentielle Dinge, die aus funktionalen Gründen ergänzt bzw. geändert werden sollten.
Ich bin mir darüber im klaren, dass ich noch ein wenig mehr Error-Handling betreiben muss, aber verstehe nicht ganz wo und wie ich da rangehen soll. Z.B. "KeyboardInterrupt" abfangen hat nicht wirklich funtkioniert. Weiß aber nicht warum. Hier auf jeden Fall mal der Code. Vielen Dank für Feedback!

Code: Alles auswählen
# -*- coding: utf-8 -*-
import sys
import time
import MySQLdb as db
from contextlib import closing
class Connector(object):
def __init__(self, db_host, db_user, db_pw, db_name, db_table, *db_rows):
self.db_host = db_host
self.db_user = db_user
self.db_pw = db_pw
self.db_name = db_name
self.db_table = db_table
self.db_rows = db_rows
self.sql_str1 = ""
self.sql_str2 = ""
for x in range (len(self.db_rows)):
if x == (len(self.db_rows) -1 ):
self.sql_str1 = self.sql_str1 + self.db_rows[x]
self.sql_str2 = self.sql_str2 + "%s"
else:
self.sql_str1 = self.sql_str1 + self.db_rows[x] + ", "
self.sql_str2 = self.sql_str2 + "%s, "
def write_into_db(self, *values):
self.values = values
self.sql = "INSERT INTO " + self.db_table + " (" + self.sql_str1 + \
") VALUES (" + self.sql_str2 + ")"
try:
with closing(
db.connect(
self.db_host,
self.db_user,
self.db_pw,
self.db_name
)
) as connection:
connection.cursor().execute(self.sql, self.values)
connection.commit()
print "Input successfull"
except db.Error as e:
mysql_error = "A MySQL error occurred.\nDate: " + \
time.strftime("%d-%m-%Y") + "\nTime: " + \
time.strftime("%H:%M:%S") + "\nError code: " + \
str(e.args[0]) + "\n" + "Error message: " + str(e.args[1])
print mysql_error
with open('logfile.txt', 'a') as file:
file.write(mysql_error)
file.write("\n\n---------------\n\n")
file.close
except:
print "An unexpected error occurred:", sys.exc_info()[0]
def main():
value1 = "teststring"
value2 = 10.3
value3 = 10
value4 = True
test = Connector("192.168.42.1", "mysqlexcel", "8bef566e3a961cf3aeaec93c75260dd4da7466b7e248d134f6b021c64161f62c",
"energie", "test", "row1", "row2", "row3", "row4")
test.write_into_db(value1, value2, value3, value4)
if __name__ == '__main__':
main()