[英]flask_sqlalchemy UPDATE row details not updating mySQL database
我有一個 Flask 應用程序和一個連接到它的 mySQL 數據庫。 我正在使用 POSTMAN 將 GET/POST 請求發送到燒瓶端點以進行用戶添加、更新和刪除。 我能夠成功地將用戶添加到數據庫中,但是在我更新 Flask 應用程序時不會拋出任何錯誤,因為郵遞員還顯示了一個成功的 JSON 響應,即"User updated!!!"
但是當我在我的 SQL Workbench 中執行SELECT * FROM Users
操作時,細節沒有被更新。
我的實現如下 - 我創建了一個帶有兩列username
和password
的模型User
。
用戶更新 API 看起來像 -
from flask_restful import Resource
from flask_sqlalchemy import SQLAlchemy
from model import User
class Update_User(Resource):
def post(self):
data = request.get_json(force=True)
usr = User.query.filter_by(username=data['username']).first()
print(1, usr.username, usr.password)
usr.password = data['new_password']
print(2, usr.username, usr.password)
db.session.commit()
db.session.close()
return {"res": "User updated!!!!"}
燒瓶輸出:
1 Ash 12345
2 Ash 00000
只是為了更好地理解,什么更好用? Python SQLAlchemy 還是 Flask 自己的 SQLAlchemy ? 因為在其他情況下我也遇到了麻煩,比如使用add_all()
同時更新兩行
在掙扎之后,我發現了我錯在哪里,遇到問題的其他人可以嘗試以下操作。
什么對我有用 -
usr.password = data['new_password']
db.session.merge(usr)
db.session.commit()
盡管將它們作為某些 stackoverflow 問題的答案,但對我不起作用的事情 -
usr.data["password"] = data['new_password']
db.session.commit()
--------------------------------------------
usr.password = data['new_password']
db.session.add(usr)
db.session.commit()
--------------------------------------------
usr.data = { "password": data['new_password'] }
db.session.commit()
希望這可以幫助你!
您需要將對象添加到會話中,以告訴 SQLAlchemy 您希望您已經進行了更改(更新之后,提交之前):
usr.password = data['new_password']
db.session.add(usr)
db.session.commit()
在 SQLAlchemy 文檔中查看更多詳細信息: https : //docs.sqlalchemy.org/en/13/orm/tutorial.html#adding-and-updating-objects
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.