Python SQLalchemy在单个事务中更新多行
在纯SQL中,我曾经以编程方式构建SQL并执行,如下所示:Python SQLalchemy在单个事务中更新多行,python,sqlalchemy,fastapi,Python,Sqlalchemy,Fastapi,在纯SQL中,我曾经以编程方式构建SQL并执行,如下所示: users = [{"username": "bob", "is_admin": true}, {"username": "charley", "is_admin": false}, ..] sql = "" for in in range(len(users)): username = u
users = [{"username": "bob", "is_admin": true}, {"username": "charley", "is_admin": false}, ..]
sql = ""
for in in range(len(users)):
username = users[i]['username']
is_admin = users[i]['is_admin']
sql += """Update projects_users SET is_admin = {is_admin} WHERE project_id = (Select id from projects where name = {project_name}) AND user_id = (Select id from users where username = {username});""".format(project_name=project_name, username=username, is_admin=is_admin)
response = connect_and_execute_sql(sql)
请注意,在上面的代码中,我正在构建用分号分隔的SQL查询,并在单个事务中一次性运行
但现在当我将其迁移到SQLalchemy时,我面临着构建和执行这样的查询的问题。要更新的记录数最多可达1000条。所以我不能一个接一个地更新。我正在使用Fast API框架,所以想知道是否有有效的方法来实现这一点。这是我的想法
如果u['is_admin']},则用户中u的true_admin=str{u['username']为u。strip{}
false_admins=str{u['username']表示用户中的u,如果不是u['is_admin']}。strip{}
sql=f
更新项目\u用户集为\u admin=TRUE
WHERE project_id IN Select id from projects WHERE name={project_name}和
在{true\u admins}中的用户名所在的用户中选择id中的用户\ id;
更新项目\u用户集为\u admin=FALSE
WHERE project_id IN Select id from projects WHERE name={project_name}和
在{false_admins}中的用户名所在的用户中选择id中的用户id;
这个想法很好,但我正在寻找类似的SQLalchemy解决方案。请注意,手动格式化字符串以将值传递给SQL查询容易出错,并可能导致SQL注入。改用占位符。