gpt4 book ai didi

python - 使用 Flask-SQLAlchemy 选择多对多

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:08 26 4
gpt4 key购买 nike

我正在尝试使用 Flask-SQLAlchemy 从数据库中选择一些数据。然而,我正在努力获取正确的数据并加入多对多。

我的模型看起来像这样。

class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
user_firstName = db.Column(db.String(64))
...
role_id = db.Column(db.Integer, db.ForeignKey('role.role_id'))


class Role(db.Model):
role_id = db.Column(db.Integer, primary_key=True)
role_name = db.Column(db.String(64), unique=True)
users = db.relationship('User', backref='role')

然后是我想要获得多对多的表格
使用 backref 进行注释

class Class(db.Model):
class_id = db.Column(db.Integer, primary_key=True)
class_name = db.Column(db.String(128), unique=True)
mm_children = db.relationship('User', secondary=student_identifier, backref=db.backref('classes'))

这是保存多对多信息的表(用户和类之间的链接)

student_identifier = db.Table('student_identifier',
db.Column('class_id', db.Integer, db.ForeignKey('class.class_id')),
db.Column('id', db.Integer, db.ForeignKey('user.id'))
)

假设我的数据库中有这个

User
id user_firstName role_id
1 'John' 3
2 'Jane' 3
3 'Jack' 1
4 'Jimmy' 3
5 'Jana' 2


Role
role_id role_name
1 'Admin'
2 'Teacher'
3 Student'


Class
class_id class_name
1 'A'
2 'B'
3 'C'

student_identfier
class_id id
1 1
1 2
2 2
3 1
1 4

student_identfier
class_id id
1 1
1 2
2 2
3 1
1 4

然后如果你想循环所有类id为1和2的类。并获取它们的名字

id      class_name   role_name
1 'A' 'Student'
2 'A' 'Student'

2 'B' 'Student'



编辑
我设法获得了类(class),但没有 in 子句。

db.session.query(
User.user_fistName,
Role.role_name,
Class.class_name
).join(Role).filter_by(role_name='Student').filter(User.classes)

最佳答案

如果您的模型和关系有效,您应该能够执行以下操作:

users = session.query(User).all()
for user in users:
users_classes = ','.join([c.class_name for c in user.classes])
print("{0} is {1} in {2}".format(user.user_firstName,
user.role.role_name,
users_classes))

希望这有帮助。

关于python - 使用 Flask-SQLAlchemy 选择多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com