Seite 1 von 1
Letzte insert ID bekommen
Verfasst: Dienstag 25. November 2014, 19:27
von audacity363
Guten Abend zusammen,
Ich suche zurzeit eine Möglichkeit mit SQL Alchemy den letzten Wert von einem Auto increment Feld nach einem Insert zu bekommen.
Bei PHP Mysqli gibt es eine Funktion, "insert_id" die genau dies tut. Den letzten automatische Generierten Wert zurückgeben. Hier mal die Doku:
http://php.net/manual/de/mysqli.insert-id.php
Gibt es so etwas auch in SQL Alchemy oder muss man selber die Query absetzen um diesen zu bekommen?
Re: Letzte insert ID bekommen
Verfasst: Dienstag 25. November 2014, 20:45
von BlackJack
@audacity363: Wozu brauchst Du das denn? Denn über solche automatisch generierten IDs würde ich so wenig wie möglich Annahmen machen. Also zum Beispiel *nicht* das die ohne Lücken vergeben werden. Noch nicht einmal das die grösste ID auch die letzte vergebene sein muss! Da stellt sich dann also die Frage wie Du das mit einer Abfrage lösen willst.
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 08:08
von Sirius3
@audacity363: bei jedem SQLAlchemy-Tabellen-Element wird automatisch die ID im entsprechenden Attribut aktualisiert, sobald der Datensatz das erste mal in die Datenbank geschrieben wird.
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 12:15
von audacity363
@BlackJack da der Datensatz im Nachhinein weiterverarbeitet wird und dementsprechend aktualisiert wird brauche ich die ID um diesen zu aktualisieren.
@Sirius3 Du meinst also das man mit:
drauf zugreifen kann?
Bei der zweiten Möglichkeit sagt er mir dass er das Attribute nicht kennt:
AttributeError: 'Table' object has no attribute 'id'
und beim ersten gibt er mir nur "tabellenname.id" aus.
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 12:30
von BlackJack
@audacity363: Nicht bei dem Tabellen-Objekt sondern bei dem Objekt das den Datensatz repräsentiert. Wie fügst Du die Werte denn konkret ein?
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 12:47
von audacity363
Code: Alles auswählen
engine = create_engine("mysql://user:passwd@localhsot/database")
connection = engine.connect()
metadata = MetaData()
table = Table("test", metadata,
Column("id", Integer(), primary_key=True, autoincrement=True),
Column("feld1", String(20)),
Column("feld2", String(20)))
insertDic = {"feld1": "wert", "feld2": "wert"}
connection.execute(table.insert(insertDic))
Sry für die schlechte Formatierung, aber ich hab's jetzt einfach mal so runter geschrieben und Tabs im Browser sind immer etwas schlecht sind.
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 12:53
von BlackJack
@audacity363: Was bekommst Du denn ausgegeben wenn Du die letzte Zeile durch folgendes ersetzt:
Code: Alles auswählen
result = connection.execute(table.insert(insertDic))
print result.inserted_primary_key
Re: Letzte insert ID bekommen
Verfasst: Mittwoch 26. November 2014, 13:00
von audacity363
BlackJack hat geschrieben:@audacity363: Was bekommst Du denn ausgegeben wenn Du die letzte Zeile durch folgendes ersetzt:
Code: Alles auswählen
result = connection.execute(table.insert(insertDic))
print result.inserted_primary_key
Ahh genau das habe ich gesucht. Danke.