簡體   English   中英

flask_sqlalchemy UPDATE 行詳細信息不更新 mySQL 數據庫

[英]flask_sqlalchemy UPDATE row details not updating mySQL database

我有一個 Flask 應用程序和一個連接到它的 mySQL 數據庫。 我正在使用 POSTMAN 將 GET/POST 請求發送到燒瓶端點以進行用戶添加、更新和刪除。 我能夠成功地將用戶添加到數據庫中,但是在我更新 Flask 應用程序時不會拋出任何錯誤,因為郵遞員還顯示了一個成功的 JSON 響應,即"User updated!!!" 但是當我在我的 SQL Workbench 中執行SELECT * FROM Users操作時,細節沒有被更新。

我的實現如下 - 我創建了一個帶有兩列usernamepassword的模型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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM