2024-07-01 07:47:21 发布
网友
我试图使用Python和SQLAlcehmy将内容插入数据库,但它给了我一个重复的外键错误。我在执行SQL查询以创建表时没有遇到任何问题。
你得到了重复,因为你写的代码是一对一的关系,而它至少是一对多的关系。在
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.Column()
Column()
另外,看看我添加到两个表中的db.Relationship()变量。这告诉ORM这两个表有1-2-many关系。它们必须在两个表中,并且一个表中的relationship列需要列出另一个表才能正常工作,如您所见。在
db.Relationship()
最后,看看__repr__。这就是ORM用来为数据库生成外键的方法。这也是非常重要的,包括。没有它,你的代码要么会非常慢,要么就是不能一起工作。 在sqlalchemy中生成外键有两个不同的选项。__repr__和{}
__repr__
__repr__旨在生成更易于机器读取的密钥,这将有助于提高性能,但可能会使读取和理解它们变得更加困难。 __str__被设计成对人类友好。这会使你的外键更容易理解,但也会使你的代码运行速度稍微慢一点。 您可以在开发时始终使用__str__,然后在准备好最终数据库时切换__repr__。在
__str__
你得到了重复,因为你写的代码是一对一的关系,而它至少是一对多的关系。在
Sql不允许您有多个变量。它为每个变量创建键,当您试图插入同一个变量,但没有在表之间建立任何类型的关系时,它会非常恼火,并抛出您得到的错误。在
下面的代码是使用flask连接到数据库的表的一对多关系。。如果你自己不使用烧瓶。。找出翻译,或者使用它。在
这里有几个不同之处需要注意。列现在是
db.Column()
而不是Column()
。这是工作中的烧瓶代码。它在数据库和表中的列之间建立连接,并说“嘿,这两个东西是连接在一起的”。在另外,看看我添加到两个表中的
db.Relationship()
变量。这告诉ORM这两个表有1-2-many关系。它们必须在两个表中,并且一个表中的relationship列需要列出另一个表才能正常工作,如您所见。在最后,看看}
__repr__
。这就是ORM用来为数据库生成外键的方法。这也是非常重要的,包括。没有它,你的代码要么会非常慢,要么就是不能一起工作。 在sqlalchemy中生成外键有两个不同的选项。__repr__
和{__repr__
旨在生成更易于机器读取的密钥,这将有助于提高性能,但可能会使读取和理解它们变得更加困难。__str__
被设计成对人类友好。这会使你的外键更容易理解,但也会使你的代码运行速度稍微慢一点。 您可以在开发时始终使用__str__
,然后在准备好最终数据库时切换__repr__
。在相关问题 更多 >
编程相关推荐