Ich muss eine SQLAlchemy-Datenbank nach id
etwas Ähnlichem abfragen
User.query.filter_by (Benutzername = 'Peter')
aber für id. Wie mache ich das? [Die Suche über Google und SO hat nicht geholfen]
python
sql
model
sqlalchemy
Oerd
quelle
quelle
Antworten:
Query hat eine get-Funktion , die das Abfragen nach dem Primärschlüssel der Tabelle unterstützt, was ich annehme
id
.So fragen Sie beispielsweise nach einem Objekt mit der ID 23:
Hinweis: Wie einige andere Kommentatoren und Antworten erwähnt haben, ist dies nicht nur eine Abkürzung für "Durchführen einer Abfragefilterung für den Primärschlüssel". Abhängig vom Status der SQLAlchemy-Sitzung kann das Ausführen dieses Codes die Datenbank abfragen und eine neue Instanz zurückgeben, oder es kann eine Instanz eines Objekts zurückgeben, das zuvor in Ihrem Code abgefragt wurde, ohne die Datenbank tatsächlich abzufragen. Wenn Sie dies noch nicht getan haben, lesen Sie die Dokumentation zur SQLAlchemy-Sitzung , um die Auswirkungen zu verstehen.
quelle
YourModel.query.get((pk1, pk2))
. Beachten Sie das Tupel.get()
Funktion fragt Objekte nach Primärschlüssel ab. Wenn Sie nach abfragen möchtenid
, sollten Sieid
zuerst den Primärschlüssel festlegen .Sie können einen Benutzer mit der ID = 1 wie folgt abfragen
session.query(User).get(1)
quelle
get () entspricht manchmal nicht Ihren Erwartungen:
Wenn Ihre Transaktion abgeschlossen wurde:
Wenn Sie sich in einer Transaktion befinden (get () gibt Ihnen das Ergebnisobjekt im Speicher, ohne die Datenbank abzufragen):
besser zu verwenden:
quelle
get()
Ergebnisobjekt im Speicher zu erhalten scheinen (ohne die Datenbank tatsächlich abzufragen), aber dasfilter().first()
wird immer die Datenbank abfragen.get
aufgrund der Effizienzsteigerung besser.get
ist effizienter.Wenn Sie verwenden, haben
tables reflection
Sie möglicherweise Probleme mit den angegebenen Lösungen. (Die vorherigen Lösungen hier haben bei mir nicht funktioniert).Was ich letztendlich benutzte, war:
(
object
wurde durch Reflektion aus der Datenbank abgerufen, aus diesem Grund müssen Sie verwenden.__class__
)Ich hoffe das hilft.
quelle
Zunächst sollten Sie
id
als Primärschlüssel festlegen .Dann können Sie die
query.get()
Methode verwenden, um Objekte abzufragen, nachid
denen bereits der Primärschlüssel vorhanden ist.Da die
query.get()
Methode zum Abfragen von Objekten nach dem Primärschlüssel.Abgeleitet aus der Flask-SQLAlchemy-Dokumentation
quelle