SQLITE3 und "INTEGER PRIMARY KEY"

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

Freitag 4. April 2008, 14:14

Hallo,

ich habe eine Datenbank in sqlite3 und dort ein Feld id vom Typ "INTEGER PRIMARY KEY".

Wenn ich jetzt einen Eintrag in die Datenbank mache, füge ich im INSERT-Query das Feld id nicht ein - es wird automatisch eine hochzählende ID verwendet.
Soweit so gut ...

Gibt es eine direkte Möglichkeit nach dem Query herauszufinden, welche id genau für diesen INSERT Befehl verwendet wurde?
Das id Feld ist in diesem Fall quasi eine Art eindeutige Transaktionsnummer. Und ich möchte diese zurückerhalten.

Hoffe ihr kennt eine Lösung.

Chris
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Freitag 4. April 2008, 14:33

Prinzipiell sollte es ein "Select max(id) from table" tun.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 4. April 2008, 14:35

Jan-Peer hat geschrieben:Prinzipiell sollte es ein "Select max(id) from table" tun.
Das ist aber insofern prinzipiell, weil ja nicht klar ist, ob die neue ID größer ist als die bis dato größte! Wenn die Implementierung erst Lücken füllt, bekommt man da Probleme. Bei MySQL gabs dazu die last_insert_id()-Funktion iirc. Such doch mal bei SQLite, ob es da was ähnliches gibt!
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. April 2008, 14:36

... nur dann, wenn er garantieren kann, dass keine andere Verbindungen zuvor ebenfalls einen Insert in genau diese Tabelle gehauen haben.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Freitag 4. April 2008, 14:48

sprudel hat geschrieben:Gibt es eine direkte Möglichkeit nach dem Query herauszufinden, welche id genau für diesen INSERT Befehl verwendet wurde?
Hallo Chris!

Vielleicht steht etwas in ``cursor.lastrowid``.

mfg
Gerold
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sprudel
User
Beiträge: 245
Registriert: Donnerstag 8. März 2007, 17:12

Freitag 4. April 2008, 15:00

gerold hat geschrieben:
sprudel hat geschrieben:Gibt es eine direkte Möglichkeit nach dem Query herauszufinden, welche id genau für diesen INSERT Befehl verwendet wurde?
Hallo Chris!

Vielleicht steht etwas in ``cursor.lastrowid``.

mfg
Gerold
:-)
Hallo gerold.

Vielen Dank, das hat perfekt funktioniert :-)
Dankeschön
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 4. April 2008, 15:31

Masaru hat geschrieben:... nur dann, wenn er garantieren kann, dass keine andere Verbindungen zuvor ebenfalls einen Insert in genau diese Tabelle gehauen haben.
Dafür gibt es ja Zugriffssperren ;-)
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. April 2008, 15:37

*g* SQlite3 unterstützt "locks"?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Freitag 4. April 2008, 15:50

hehe ... vermutlich nicht ;-)
Antworten