【发布时间】:2019-05-06 02:54:36
【问题描述】:
【问题讨论】:
-
将代码/错误作为图像发布会使人们更难提供帮助。请编辑您的问题并将所有项目以纯文本形式发布。
标签: python mysql sql database sqlalchemy
【问题讨论】:
标签: python mysql sql database sqlalchemy
您得到了重复,因为您将代码编写为一对一的关系,而实际上它至少是一对多的关系。
Sql 不允许您拥有多个变量。它为每个变量创建键,当您尝试插入相同的变量,但没有在表之间建立任何类型的关系时,它会让您非常沮丧,并引发您遇到的错误。
以下代码是您的表的一对多关系,使用烧瓶连接到数据库。如果您自己不使用烧瓶..弄清楚翻译,或者使用它。
class ChildcareUnit(db.Model):
Childcare_id=db.Column('ChildcareUnit_id',db.Integer,primary_key=True)
fullname = db.Column(String(250), nullable = False)
shortname = db.Column(String(250), nullable = False)
_Menu = db.relationship('Menu')
def __init__(self,fullname,shortname):
self.fullname = fullname
self.shortname = shortname
def __repr__(self):
return '<ChildcareUnit %r>' % self.id
class Menu(db.Model):
menu_id = db.Column('menu_id', db.Integer, primary_key=True)
menu_date = db.Column('Date', Date, nullable=True)
idChildcareUnit=db.Column(db.Integer,db.Forgeinkey('ChilecareUnit.ChilecareUnit_id'))
ChilecareUnits = db.relationship('ChildcareUnit')
def __init__(self,menu_date):
self.menu_date = menu_date
def __repr__(self):
return '<Menu %r>' % self.id
这里需要注意几个不同之处。列现在是 db.Column() 而不是 Column()。这是工作中的 Flask 代码。它在您的数据库和该表中的列之间建立连接,说“嘿,这两件事是连接的”。
另外,查看我添加到两个表中的db.Relationship() 变量。这就是告诉您的 ORM 这两个表具有 1-2-many 关系的原因。它们需要在两个表中,并且一个表中的关系列需要列出另一个表才能工作,如您所见。
最后,看看__repr__。这就是你的 ORM 用来为你的数据库生成外键的东西。包括在内也很重要。没有它,你的代码要么超级慢,要么不能一起工作。
在 sqlalchemy 中生成外键有两个不同的选项。 __repr__ 和 __str__
__repr__ 旨在生成更易于机器读取的密钥,这将有助于提高性能,但可能会使阅读和理解它们变得更加困难。
__str__ 旨在人性化。它会让你的外键更容易理解,但它也会让你的代码运行得慢一点。
您可以在开发时始终使用__str__,然后在准备好拥有最终数据库时切换__repr__。
【讨论】: