How do I query an association table in SQLAlchemy?(如何在SQLAlChemy中查询关联表?)
本文介绍了如何在SQLAlChemy中查询关联表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试将SQL查询转换为对GET API内部用户的SQLAlChemy查询。问题是我不能从关联表中查询任何东西。(我确定我不知道方法)。
ORM:
roles_users = db.Table(
'roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50), unique=True)
description = db.Column(db.String(255))
def __str__(self):
return self.name
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(50))
last_name = db.Column(db.String(50))
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(255))
.
.
.
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
def __str__(self):
return self.email
正在处理SQL查询:
select first_name, last_name, role.name from user
join roles_users
join role on user.id = roles_users.user_id
and role.id = roles_users.role_id;
我遇到问题的SQLAlChemy查询:
roles_users.query.join(Role).join(User)
.filter(roles_users.user_id == User.id and
roles_users.role_id == Role.id).all()
我使用上述SQLAlChemy查询时遇到的错误:
AttributeError: 'Table' object has no attribute 'query'
如何使用SQLAlChemy执行与SQL查询等效的操作?
推荐答案
OK,所以在Flask-SQL炼金术中查询关联对象的关键是对ROLES_USERS进行外部联接。试着先加入所有的桌子,然后再加入过滤。我将在下面发布答案。
query_user_role = User.query.join(roles_users).join(Role).
filter((roles_users.c.user_id == User.id) & (roles_users.c.role_id == Role.id)).all()
查询关联表对象时不要忘了放‘c’。没有它,它就不会工作。
还有一件事,不要忘记设置backref lazy=‘join’
这篇关于如何在SQLAlChemy中查询关联表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在SQLAlChemy中查询关联表?


猜你喜欢
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- 如何将一个类的函数分成多个文件? 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12