【发布时间】:2019-01-27 04:27:59
【问题描述】:
我使用 Flask 和 Flask-SQLAlchemy for ORM 制作了一个学费支付应用程序。
我有一个User 表,我用这个表来登录学校帐户和家长帐户。虽然我将学生数据存储在表Student 中并且学生没有登录帐户。
我想问什么,如何将Student 表与SCOOL_ID 和PARENT_ID 建立关系...?而家长账户和学校账户在同一张表,即User表。
一个学生有一个家长,一个学生有一个学校。
我必须把学校和家长之间的桌子分开吗..?
到目前为止,我已经像这样使用 Flask-SQLAlchemy 做到了,但我不确定这是否好。
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(200))
email = db.Column(db.String(120), index=True, unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
created_at = db.Column(db.DateTime, default=datetime.utcnow())
updated_at = db.Column(db.DateTime, default=datetime.utcnow())
association_roles = db.Table('association_roles',
db.Column('parent_id', db.Integer, db.ForeignKey('user.id')),
db.Column('school_id', db.Integer, db.ForeignKey('user.id'))
)
class Student(db.Model):
id = db.Column(db.Integer, primary_key=True)
student_registration_number = db.Column(db.String(120), index=True, unique=True)
name = db.Column(db.String(100))
major = db.Column(db.String(50))
created_at = db.Column(db.DateTime, default=datetime.utcnow())
updated_at = db.Column(db.DateTime, default=datetime.utcnow())
association_roles = db.relationship(
'Student', secondary=association_roles,
primaryjoin=(association_roles.c.parent_id == id),
secondaryjoin=(association_roles.c.school_id == id),
backref=db.backref('student', lazy='dynamic'), lazy='dynamic')
那么,如何做到这一点..?,任何帮助将不胜感激。
【问题讨论】:
-
所以只是为了澄清......你是说一个“学生”有一个“父母”和一个“学校”。但是,“学校”和“父母”都存储在“用户”表中对吗?因此,实际上你有一个(学生)到多个(用户)的情况,而不是多对多......所以没有理由有一个关联表......我正确吗?
标签: python sql flask sqlalchemy flask-sqlalchemy