Wie kann ich die Informationen einer Zeile aktualisieren?
Zum Beispiel möchte ich die Namensspalte der Zeile mit der ID 5 ändern.
python
sqlalchemy
flask-sqlalchemy
pocorschi
quelle
quelle
uesd_at = db.Column(db.DateTime)
ich nur ausführen,obj.used_at = datetime.datetime.now()
db.session.commit()
aber kein Wert auf das Feld gesetzt.update
In SQLAlchemy gibt es eine Methode für das BaseQuery-Objekt, die von zurückgegeben wirdfilter_by
.Der Vorteil der Verwendung
update
gegenüber dem Ändern der Entität ergibt sich, wenn viele Objekte aktualisiert werden müssen.Wenn Sie
add_user
allenadmin
s die Erlaubnis geben möchten ,Beachten Sie, dass
filter_by
Schlüsselwortargumente verwendet werden (verwenden Sie nur eines=
), währendfilter
ein Ausdruck verwendet wird.quelle
admin
, was irreführend sein kann, da das Ergebnis die Anzahl der aktualisierten Zeilen ist. Ist es nicht?User
Elemente von der Abfrage abrufen kann, nicht die Anzahl der betroffenen Benutzer?Dies funktioniert nicht, wenn Sie ein ausgewähltes Attribut des Modells ändern. Eingelegte Attribute sollten ersetzt werden, um Aktualisierungen auszulösen:
quelle
data
und neu zuweisen.user.data = data
Das Zuweisen und Festschreiben des Werts funktioniert für alle Datentypen außer den Attributen JSON und Pickled. Da der eingelegte Typ oben erläutert wurde, werde ich eine etwas andere, aber einfache Möglichkeit zum Aktualisieren von JSONs aufzeigen.
Angenommen, das Modell ist wie oben.
Dadurch wird der Benutzer mit den Daten {"Land": "Sri Lanka"} zur MySQL-Datenbank hinzugefügt.
Das Ändern von Daten wird ignoriert. Mein Code, der nicht funktioniert hat, lautet wie folgt.
Anstatt die schmerzhafte Arbeit des Kopierens des JSON in ein neues Diktat (ohne es wie oben einer neuen Variablen zuzuweisen) zu durchlaufen, die hätte funktionieren sollen, fand ich einen einfachen Weg, dies zu tun. Es gibt eine Möglichkeit, das von JSONs geänderte System zu kennzeichnen.
Es folgt der Arbeitscode.
Das hat wie ein Zauber gewirkt. Zusammen mit dieser Methode wird hier eine andere Methode vorgeschlagen. Ich hoffe, ich habe jemandem geholfen.
quelle
db.session.merge(user)
Das Hinzufügen dieses Codes hat bei mir funktioniert, FYI.