为什么会出现重复的外键错误?

xyhw6mcr  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(452)

我正在尝试使用python和sqlalcehmy将内容插入数据库,但它会给我一个重复的外键错误。我以前在执行sql查询来创建表时没有遇到任何问题。

vfhzx4xs

vfhzx4xs1#

您之所以得到重复的代码,是因为您将代码编写为一对一关系,而这至少是一对多关系。
sql不允许您拥有任何变量中的多个。它为每个变量创建键,当您尝试插入同一个变量,但尚未在表之间设置任何类型的关系时,它会对您感到非常不安,并抛出所得到的错误。
下面的代码是使用flask连接到数据库的表的一对多关系。。如果你自己不用 flask 。。找出翻译,或者使用它。

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关系的原因。它们需要在两个表中,一个表中的relationship列需要列出另一个表才能工作,如您所见。
最后,看看 __repr__ . 这就是orm用来为数据库生成外键的方法。这也非常重要,包括。如果没有它,你的代码要么会非常慢,要么就是无法协同工作。在sqlalchemy中生成外键有两个不同的选项。 __repr__ 以及
str__repr__ 设计用于生成更易于机器读取的密钥,这将有助于提高性能,但可能会使读取和理解它们变得更加困难。 __str__ 是为人性化设计的。这会使外键更容易理解,但也会使代码运行稍微慢一点。你可以随时使用 __str__ 在开发过程中,然后切换 __repr__ 当你准备好拥有你的最终数据库时。

相关问题