Ho appena incontrato un problema abbastanza irritante e, dopo aver eseguito il test, ho trovato che NONE delle risposte disponibili sono sufficienti.Ottieni l'ultimo valore inserito da MySQL utilizzando SQLAlchemy
Ho visto vari suggerimenti ma nessuno sembra essere in grado di restituire l'ultimo valore inserito per un campo auto_increment in MySQL.
Ho visto esempi che menzionano l'uso di session.flush() per aggiungere il record e recuperare l'id. Tuttavia, che sembra sempre di tornare 0.
Ho anche visto esempi che riportano l'uso di session.refresh(), ma che solleva il seguente errore: InvalidRequestError: Impossibile aggiornare esempio ''
Quello che sto provare a farlo sembra follemente semplice ma non riesco a capire il segreto.
Sto usando l'approccio dichiarativo.
Quindi, il mio codice simile a questa:
class Foo(Base):
__tablename__ = 'tblfoo'
__table_args__ = {'mysql_engine':'InnoDB'}
ModelID = Column(INTEGER(unsigned=True), default=0, primary_key=True, autoincrement=True)
ModelName = Column(Unicode(255), nullable=True, index=True)
ModelMemo = Column(Unicode(255), nullable=True)
f = Foo(ModelName='Bar', ModelMemo='Foo')
session.add(f)
session.flush()
A questo punto, l'oggetto f è stato spinto al DB, ed è stato assegnato automaticamente un ID univoco chiave primaria. Tuttavia, non riesco a trovare un modo per ottenere il valore da utilizzare in alcune operazioni aggiuntive. Vorrei fare quanto segue:
my_new_id = f.ModelID
So che potrei semplicemente eseguire un'altra query per cercare il ModelID sulla base di altri parametri, ma io preferirei non se possibile.
Apprezzerei molto qualsiasi idea di una soluzione a questo problema.
Grazie per l'aiuto in anticipo.
Bella cattura, non ho notato il default = 0. –
Il log del server funzionerà sempre per trovare il problema :) – Nilesh
Ugh ... sì, bella cattura. La mia testa era nel mondo SQL in cui è necessario un valore predefinito per un campo chiave primaria quando si crea la tabella. Grazie per la scoperta. – PlaidFan