Seite 1 von 1

Wie SQLite3 in native Pythonfunktionen "wrappen"?

Verfasst: Montag 13. Juni 2016, 11:13
von grum.py
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)"?

Re: Wie SQLite3 in native Pythonfunktionen "wrappen"?

Verfasst: Montag 13. Juni 2016, 11:35
von Dav1d
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.

Re: Wie SQLite3 in native Pythonfunktionen "wrappen"?

Verfasst: Montag 13. Juni 2016, 11:42
von grum.py
Das kommt dem, was ich suche, zumindest schon ein bisschen nahe. Danke, ich guck's mir mal an.

Re: Wie SQLite3 in native Pythonfunktionen "wrappen"?

Verfasst: Montag 13. Juni 2016, 11:54
von 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.

Re: Wie SQLite3 in native Pythonfunktionen "wrappen"?

Verfasst: Montag 13. Juni 2016, 11:57
von grum.py
So ähnlich wie in C# (LINQ)?