flask_sqlalchemy UPDATE 行详细信息未更新 mySQL 数据库
flask_sqlalchemy UPDATE row details not updating mySQL database
我有一个烧瓶应用程序和一个连接到它的 mySQL 数据库。我正在使用 POSTMAN 向烧瓶端点发送 GET/POST 请求以进行用户添加、更新和删除。我能够成功地将用户添加到数据库中,但是当我更新 flask 应用程序时不会抛出任何错误,因为邮递员也显示成功的 JSON 响应 "User updated!!!"
但是当我执行 SELECT * FROM Users
在我的操作中 SQL Workbench 详细信息未更新。
我的实现如下——
我创建了一个包含两列 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 SQL炼金术还是烧瓶自己的SQL炼金术?因为在其他情况下我也遇到了麻烦,比如使用 add_all()
同时更新两行
您需要将对象添加到会话中以告诉 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
经过一番努力,我发现了我错在哪里,遇到问题的其他人可以尝试以下方法。
对我有用的 -
usr.password = data['new_password']
db.session.merge(usr)
db.session.commit()
尽管有一些 Whosebug 问题的答案,但对我不起作用的事情 -
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()
希望对您有所帮助!
我有一个烧瓶应用程序和一个连接到它的 mySQL 数据库。我正在使用 POSTMAN 向烧瓶端点发送 GET/POST 请求以进行用户添加、更新和删除。我能够成功地将用户添加到数据库中,但是当我更新 flask 应用程序时不会抛出任何错误,因为邮递员也显示成功的 JSON 响应 "User updated!!!"
但是当我执行 SELECT * FROM Users
在我的操作中 SQL Workbench 详细信息未更新。
我的实现如下——
我创建了一个包含两列 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 SQL炼金术还是烧瓶自己的SQL炼金术?因为在其他情况下我也遇到了麻烦,比如使用 add_all()
您需要将对象添加到会话中以告诉 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
经过一番努力,我发现了我错在哪里,遇到问题的其他人可以尝试以下方法。
对我有用的 -
usr.password = data['new_password']
db.session.merge(usr)
db.session.commit()
尽管有一些 Whosebug 问题的答案,但对我不起作用的事情 -
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()
希望对您有所帮助!