【发布时间】:2022-01-24 05:19:04
【问题描述】:
我有一个 UserService 连接表,如下所示:
[
{
"id": 1,
"service_id": 1,
"user_id": 1
},
{
"id": 2,
"service_id": 2,
"user_id": 1
},
{
"id": 3,
"service_id": 2,
"user_id": 2
},
{
"id": 4,
"service_id": 3,
"user_id": 1
},
{
"id": 5,
"service_id": 3,
"user_id": 2
}
]
在创建新的 UserService 时,如果值已经存在,我不希望用户能够添加条目。我当前的 if 语句当前正在返回 else 语句。我在这里做错了什么?
@bp.route('/user/<userid>/add-service/<serviceid>', methods=['POST'])
def add_service_to_user(userid, serviceid):
user = db_session.query(User).filter(User.id == userid).first()
service = db_session.query(Service).filter(Service.id == serviceid).first()
all_user_services = db_session.query(UserService).all()
for service in all_user_services:
if serviceid == service.service_id and userid == service.user_id:
return jsonify({'Message': f'User with id: {userid} already has Service with id: {serviceid}'})
else:
return 'hello'
【问题讨论】:
-
如果您需要对 { service_id user_id } 是唯一的,则使用唯一约束强制执行此操作并处理尝试添加具有相同的第二个条目的错误价值观。查询+检查总是会受到TOCTOU的影响,您最终可能会得到多个条目。
标签: python flask sqlalchemy