SQLAlchemy Expression Language vs DB-API
Verfasst: Sonntag 22. Mai 2011, 10:22
Hi,
ich mache gerade meine ersten Schritte mit der Verwendung einer DB unter Python. (Für Python würde ich mich ebefalls als "Grünling" bezeichen, Entwickle jedoch schon länger prozedural und finde das Thema OO und dynamischtypisierte Sprache recht interessant !)
Um mir das arbeiten mit der DB zu erleichtern habe ich bekommen, die Zugriffe via DB-API zu erleichtern (siehe bsp unten). Ich habe ich jedoch die Vermutung das ich eigentlich versuch die SQLAlchemy Expression Language nachzubauen ... wenn dem so ist sollte ich wohl DB-API vergessen und mich mehr mit der SA-EL beschäftigen. ORM ist für mich (noch) kein Thema, das ist mir vorerst noch zu heavy, Pickle möchte ich nicht verwenden, da ich die gesicherten Daten visuell prüfen möchte usw
Beispiel: Zugriffe per Select möchte ich mir durch die Methode: Select() erleichtern:
Um Select-Statement:
Die Methode sieht so aus:
ich mache gerade meine ersten Schritte mit der Verwendung einer DB unter Python. (Für Python würde ich mich ebefalls als "Grünling" bezeichen, Entwickle jedoch schon länger prozedural und finde das Thema OO und dynamischtypisierte Sprache recht interessant !)
Um mir das arbeiten mit der DB zu erleichtern habe ich bekommen, die Zugriffe via DB-API zu erleichtern (siehe bsp unten). Ich habe ich jedoch die Vermutung das ich eigentlich versuch die SQLAlchemy Expression Language nachzubauen ... wenn dem so ist sollte ich wohl DB-API vergessen und mich mehr mit der SA-EL beschäftigen. ORM ist für mich (noch) kein Thema, das ist mir vorerst noch zu heavy, Pickle möchte ich nicht verwenden, da ich die gesicherten Daten visuell prüfen möchte usw
Beispiel: Zugriffe per Select möchte ich mir durch die Methode: Select() erleichtern:
Um Select-Statement:
zu erzeugen, wird folgende Methode einer Datenbankklasse aufgerufen:SELECT * FROM file_info WHERE typ = 'Directory'
Code: Alles auswählen
sql = 'typ = ?'
args = ('Directory',)
it_result = db.select('file_info', sql , args)
Code: Alles auswählen
def select (self, tabname,where=None,values=None):
""" select records from the database.
@tabname Tabellenname auf die Zugegriffen werden soll
@where Felder die abgefragt werden sollen
@value Werte für die Where-Bedingung
@return Es wird eine Liste mit den Datenbankeinträgen zurückgegeben (als Dict)
Beispiel:
where = 'master = ? or master = ?'
values = ('Ami','Abat',)
Die Methoden macht daraus: master='Ami or master='ABAT'
"""
if where:
sql = 'SELECT * FROM {table} WHERE {val}'.format(table=tabname, val=where)
else:
sql = 'SELECT * FROM {table} '.format(table=tabname)
print (sql)
cursor = self.db.cursor()
cursor.execute(sql,values)
records = cursor.fetchall()
cursor.close()
# Datenbank-Sätze kommen in eine Liste die pro Satz ein Dict mit der Strutur der DB enthält
struc = self.it_struc[tabname]
it_lis = []
for row in records:
combine = zip(struc,row)
it_lis.append(dict(combine))
pass
return it_lis