Wie SQLite3 in native Pythonfunktionen "wrappen"?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
grum.py
User
Beiträge: 137
Registriert: Montag 11. Mai 2015, 15:27

Unter Common Lisp benutze ich für Datenbankzugriffe gern datafly, damit ich statt elend langer (und potenziell fehleranfälliger) query strings halbwegs nativ auf der Datenbank arbeiten kann; also statt "SELECT col FROM table WHERE id=123":

[codebox=lisp file=Auszug.lisp](select :col
(from :table)
(where
(:= :id 123)))[/code]

Gibt es etwas Vergleichbares auch für Pythons sqlite3-Modul oder bleibt mir da nur die etwas unpraktische Methode mit "c.execute(elend langer String)"?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

SQLAlchemy als ORM kann sowas in der Art:

Code: Alles auswählen

session.query(Table.col).filter(Table.id == 123).one()
session.query(Table).filter(Table.id == 123).one().col
# Falls id der Primary Key ist
session.query(Table.col).get(123)
session.query(Table).get(123).col
Das ist wahrscheinlich nicht 1:1 was du suchst, aber ein Blick in SQLAlchemy ist nie verkehrt.
the more they change the more they stay the same
grum.py
User
Beiträge: 137
Registriert: Montag 11. Mai 2015, 15:27

Das kommt dem, was ich suche, zumindest schon ein bisschen nahe. Danke, ich guck's mir mal an.
BlackJack

Das ORM ist sozusagen erst die zweite Stufe. Eine Ebene tiefer SQLAlchemy kann auch einfach nur als Ersatz für SQL als Zeichenketten verwendet werden:

Code: Alles auswählen

In [20]: print sa.select([table.c.col]).where(table.c.id == 123)
SELECT "table".col 
FROM "table" 
WHERE "table".id = :id_1
Und wenn man vorher eine Datenbankengine an die Metadaten vom `table`-Exemplar gebunden hat, kann man einfach ein ``.execute()`` hinten dran hängen um das dann auch auszuführen.
Antworten