class Project(db.Model):
project_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
date = db.Column(db.Date)
def __init__(self, name, date):
self.name = name
self.date = date
def __repr__(self):
return self.name
class Report(db.Model):
report_id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.Integer, db.ForeignKey('project.project_id'))
project = db.relationship('Report', backref='reports', lazy='dynamic')
date = db.Column(db.Date)
issue = db.Column(db.Text)
def __init__(self, project_id, date, issue):
self.project_id = project_id
self.date = date
self.issue = issue
def __repr__(self):
return self.issue
问题:
两个表之间的连接是否正确为一对多关系?
这里真的需要 init 功能吗?没有他们,我在网上看到了一些代码!
非常感谢
答案 0 :(得分:0)
init 函数是这样的,因此当您创建类的实例时,您可以设置起始值或执行初始化函数。如果您觉得不需要这样做,可以省略 init 定义。
答案 1 :(得分:0)
Flask-SQLAlchemy's documentation涵盖了创建一对多关系。它提供了一个Person
具有多个Address
es。
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
这与你拥有的相符。唯一的区别是该示例将关系放在父模型上。它可以放在任何一种型号上。我总是把它放在最有意义的地方。
至于您的__init__
方法,它们很可能是不必要的。 Flask-SQLAlchemy的Model
类有一个__init__
,它接受允许您为列赋值的关键字参数。不同之处在于您的版本需要指定的字段,而默认版本不需要任何字段。
您的版本仅用作
project = Project('My Project', date(2015, 4, 23))
Model
的版本不仅以相同的方式工作,而且还可以用作
project = Project()
project.name = 'My Project'
project.date = date(2015, 4, 23)