SqlAlchemy erhaltener primary Key

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Hallo,
ich habe eine Frage zu SQLAlchemy:

Ist es möglich direkt nach dem Ausführen eines Insert-Befehls den via AUTO INCREMENT erhaltenen Primärschlüsselwert zu erhalten, um ihn dann weiterzuverarbeiten?

Wäre echt super.

LG Chrsi
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Nach dem ``commit`` müsstest du dieses Feld von deinem Datenobjekt abrufen können.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Vielen Dank schonmal.
Ist es irgendwie möglich ein Autocommit zu erzwingen, so dass der Wert sofort verfügbar ist?
deets

ms4py hat geschrieben:Nach dem ``commit`` müsstest du dieses Feld von deinem Datenobjekt abrufen können.
Guten Tag Herr Henne, mein Name ist Ei!

Nach einem Commit ist ein Datenobjekt ungueltig, und man braucht die ID, um es zu bekommen (oder ein anderes eindeutiges Kriterium).

@sprudel

Ich benutze Elixir als ORM-Layer ueber sqlalchemy, und da kann man ein session.flush() ausfuehren, um inserts wirklich auszufuehren. Danach ist die ID verfuegbar. Ich habe mit dem Declarative-Mapper von SQLAlchemy keine wirkliche Erfahrung, aber der sollte sich aehnlich verhalten.

Und alle beide machen werden das hier benutzen:

http://www.sqlalchemy.org/docs/core/tut ... xpressions

Code: Alles auswählen

>>> result.inserted_primary_key
[1]
Ach, was ist die SA-Dokumentation doch schlicht schoen. Muss nur lesen wollen ;)
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Ich fürchte eben, bei mir wird einiges etwas anders sein, da ich nicht das direkte SQLAlchemy sondern SqlSoup als Aufsatz benutze.
Elixir ist auch ziemlich cool, aber für meine Anwendungszwecke brauche ich es eben etwas "roher" ;)
deets

Was genau meinst du mit roher? Ich finde genau das sehr gelungen an Elixir - nett OO/ORM, aber wenn man will, ist man mit MeineEntity.eigenschaft direkt in der SQLAlchemy-Welt.

Wie dem auch sei, SqlSoup kenne ich nicht - aber wenn es "roher" ist, sollte es ja erst recht den Zugriff aus's result-Objekt erlauben.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

SqlSoup ist doch auch "nur" ein High-Level Layer über SQLAlchemy. Heißt: man kommt sich auch bei der Verwendung von SqlSoup an den "Last Insert Key".

Gruß, noisefloor
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Gibt es denn eine Möglichkeit, irgendwie ein Autocommit zu erzwingen, so dass man sofort den erhaltenen Primärschlüssel bekommt?
deets

Ah, das ist natuerlich ein Ding, ja... also, session.flush() sollte klappen. Aber das buendelt natuerlich eine Menge Statements. KA wie man dann genau an das kommt, was einen interessiert. Wie waer's mit Referenz auf das Resultset behalten, flushen + dann mal nachgucken?
Antworten