Ho passato un po 'di tempo a leggere il numero docs di SQLite, varie domande e risposte qui su Stack Overflow e this thing, ma non sono arrivato a una risposta completa.SQLite inserire o ignorare e restituire originale _rowid_
So che non esiste un modo per fare qualcosa di simile INSERT OR IGNORE INTO foo VALUES(...)
con SQLite e tornare l'identificativo della riga originale, e che il più vicino ad esso sarebbe INSERT OR REPLACE
ma che elimina l'intera riga e inserisce una nuova riga e ottiene così un nuovo rowid.
tabella Esempio:
CREATE TABLE foo(
id INTEGER PRIMARY KEY AUTOINCREMENT,
data TEXT
);
In questo momento mi può fare:
sql = sqlite3.connect(":memory:")
# create database
sql.execute("INSERT OR IGNORE INTO foo(data) VALUES(?);", ("Some text.",))
the_id_of_the_row = None
for row in sql.execute("SELECT id FROM foo WHERE data = ?", ("Some text.",)):
the_id_of_the_row = row[0]
Ma qualcosa di ideale sarebbe simile:
the_id_of_the_row = sql.execute("INSERT OR IGNORE foo(data) VALUES(?)", ("Some text",)).lastrowid
Qual è la migliore (leggi: più efficiente) modo di inserire una riga in una tabella e restituire il rowid, o di ignorare la riga se io esiste già e basta avere il rowid? L'efficienza è importante perché questo accadrà abbastanza spesso.
C'è un modo per INSERT OR IGNORE
e restituire il rowid della riga a cui è stata confrontata la riga ignorata? Sarebbe fantastico, perché sarebbe altrettanto efficiente di un inserto.
Hai provato "AGGIORNAMENTO ... DOVE ..."? – Keith