为什么我得到一个重复的外键错误?

2024-07-01 07:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Python和SQLAlcehmy将内容插入数据库,但它给了我一个重复的外键错误。我在执行SQL查询以创建表时没有遇到任何问题。 This is my Python code to create the tables

enter image description here


Tags: 数据库内容sql错误外键sqlalcehmy
1条回答
网友
1楼 · 发布于 2024-07-01 07:47:21

你得到了重复,因为你写的代码是一对一的关系,而它至少是一对多的关系。在

Sql不允许您有多个变量。它为每个变量创建键,当您试图插入同一个变量,但没有在表之间建立任何类型的关系时,它会非常恼火,并抛出您得到的错误。在

下面的代码是使用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()。这是工作中的烧瓶代码。它在数据库和表中的列之间建立连接,并说“嘿,这两个东西是连接在一起的”。在

另外,看看我添加到两个表中的db.Relationship()变量。这告诉ORM这两个表有1-2-many关系。它们必须在两个表中,并且一个表中的relationship列需要列出另一个表才能正常工作,如您所见。在

最后,看看__repr__。这就是ORM用来为数据库生成外键的方法。这也是非常重要的,包括。没有它,你的代码要么会非常慢,要么就是不能一起工作。 在sqlalchemy中生成外键有两个不同的选项。__repr__和{}

__repr__旨在生成更易于机器读取的密钥,这将有助于提高性能,但可能会使读取和理解它们变得更加困难。 __str__被设计成对人类友好。这会使你的外键更容易理解,但也会使你的代码运行速度稍微慢一点。 您可以在开发时始终使用__str__,然后在准备好最终数据库时切换__repr__。在

相关问题 更多 >

    热门问题