Python SQLalchemy在单个事务中更新多行

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

在纯SQL中,我曾经以编程方式构建SQL并执行,如下所示:

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注入。改用占位符。