Flask-SQLAlchemy多对多

罚球

来自Django,我很难弄清多对多关系的工作原理。

以下models.py无法正常工作,出现错误:InvalidRequestError:一个或多个映射器无法初始化-无法继续进行其他映射器的初始化。最初的例外是:在关系'Sector.companies'上创建backref'sectors'时出错:该名称的属性存在于映射器'Mapper | Company | companies'

代码如下:

`    
company_contacts = db.Table('company_contacts',
                       db.Column('company_id', db.Integer, db.ForeignKey('companies.id')),
                       db.Column('contact_id', db.Integer, db.ForeignKey('contacts.id'))
                       )


company_sectors = db.Table('company_sectors',
                   db.Column('company_id', db.Integer, db.ForeignKey('companies.id')),
                   db.Column('sector_id', db.Integer, db.ForeignKey('sectors.id'))
                   )

company_worklists = db.Table('company_worklists',
                   db.Column('company_id', db.Integer, db.ForeignKey('companies.id')),
                   db.Column('worklist_id', db.Integer, db.ForeignKey('worklists.id'))
                   )


class Sector(db.Model):

    __tablename__ = 'sectors'
    id = db.Column(db.Integer, primary_key = True)
    name_srb= db.Column(db.String(64), unique = True)
    name_ita= db.Column(db.String(64), unique = True)

    companies = db.relationship('Company',
                           secondary = company_sectors,
                           backref = db.backref('sectors', lazy = 'dynamic'),
                           lazy = 'dynamic')



class Contact(db.Model):

    __tablename__ = 'contacts'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), unique = False)
    last_name = db.Column(db.String(64), unique = False)
    position_srb = db.Column(db.String(64), unique = False)
    position_ita = db.Column(db.String(64), unique = False)
    email = db.Column(db.String(120), unique = True)
    phone = db.Column(db.String(100))
    created = db.Column(db.DateTime(), default=datetime.now)
    updated = db.Column(db.DateTime(), default=datetime.now,onupdate=datetime.now)

    #companies = db.relationship('Company',
                           #secondary = company_contacts,
                           #backref = db.backref('companies', lazy = 'dynamic'),
                           #lazy = 'dynamic')



class WorkList(db.Model):

    __tablename__ = 'worklists'
    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(64), unique = True)
    created = db.Column(db.DateTime(), default = datetime.now)
    updated = db.Column(db.DateTime(), default=datetime.now,onupdate=datetime.now)
    slug =  db.Column(db.String(100), unique = True)


class Company(db.Model):

    __tablename__ = 'companies'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(64), unique = True)
    address = db.Column(db.String(120), unique = False)
    website = db.Column(db.String(100), unique = False)
    city = db.Column(db.String(20), unique = False)
    desc = db.Column(db.Text())
    email = db.Column(db.String(120), unique = True)
    created = db.Column(db.DateTime(), default=datetime.now)
    updated = db.Column(db.DateTime(), default=datetime.now,onupdate=datetime.now)
    slug =  db.Column(db.String(100), unique = True)
    phone = db.Column(db.String(100))
    fax = db.Column(db.String(100), unique = False)



    contacts = db.relationship('Contact',
                           secondary = company_contacts,
                           backref = db.backref('contacts', lazy = 'dynamic'),
                           lazy = 'dynamic')

    sectors = db.relationship('Sector',
                           secondary = company_sectors,
                           backref = db.backref('sectors', lazy = 'dynamic'),
                           lazy = 'dynamic')


    wlists= db.relationship('WorkList',
                           secondary = company_worklists,
                           backref = db.backref('wlists', lazy = 'dynamic'),
                           lazy = 'dynamic')

我希望能够访问诸如Company.contacts和Contact.companies ...之类的东西。

单负消除

这种relationship(backref=...)构造是一种方便的链式机制,因此您可以获取指向两个方向的引用,aCompany.sectors和aSector.companies仅定义了一个。您已经定义了两个关系。您似乎已经知道了这一点;您的代码包含很多重复注释的引用。

删除所有重复的关系(在其中定义了相应的backref的地方),您应该会很好。

或者,您可以使用该relationship(back_populates=...)构造并显式定义所有房地产。这样,您可以在每个类上看到它对类本身具有什么样的集合属性,但是它们将被正确地捆绑在一起。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flask-SQLAlchemy查询多对多

来自分类Dev

使用Flask-SQLAlchemy选择多对多

来自分类Dev

Flask SQLAlchemy多对多删除元素

来自分类Dev

Flask-SQLAlchemy多对多插入

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

SQLAlchemy + Flask多对一关系

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

设置多对多sqlalchemy flask app sqlite db的插入顺序

来自分类Dev

使用Flask-SQLAlchemy进行多对多查询

来自分类Dev

Jsonify Flask-SQLAlchemy Flask中的多对一关系

来自分类Dev

通过Flask显示好友名称多对多sqlalchemy

来自分类Dev

Flask-Sqlalchemy 3种多对多关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

我应该使用flask sqlalchemy多对多关系吗?

来自分类Dev

Flask-SQLAlchemy筛选与父模型的多对多关系

来自分类Dev

Flask-SQLAlchemy更新一对多记录

来自分类Dev

如何使用flask-sqlalchemy多次插入多对多关系?

来自分类Dev

Jsonify flask-sqlalchemy烧瓶中的多对一关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

在Flask sqlalchemy中订购一对多模型?

来自分类Dev

Flask-SQLAlchemy查询带有多个必需标签的多对多标签

来自分类Dev

Flask SQLalchemy-多对多-显示带有所有标签的照片(或包含所有帖子的博客等)

来自分类Dev

使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

来自分类Dev

如何使用带有额外数据的Flask-sqlalchemy创建多对多关联?

来自分类Dev

Flask-appbuilder多对多关系sqlalchemy.exc.NoReferencedTableError错误

来自分类Dev

如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

来自分类Dev

Flask / SQLAlchemy-多对多关系的关联模型和关联表之间的区别?

来自分类Dev

使用多对多关系时,Flask-SQLAlchemy返回查询中的对象

来自分类Dev

如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

Related 相关文章

  1. 1

    Flask-SQLAlchemy查询多对多

  2. 2

    使用Flask-SQLAlchemy选择多对多

  3. 3

    Flask SQLAlchemy多对多删除元素

  4. 4

    Flask-SQLAlchemy多对多插入

  5. 5

    SqlAlchemy(Postgres + Flask):如何求和多列?

  6. 6

    SQLAlchemy + Flask多对一关系

  7. 7

    SqlAlchemy(Postgres + Flask):如何求和多列?

  8. 8

    设置多对多sqlalchemy flask app sqlite db的插入顺序

  9. 9

    使用Flask-SQLAlchemy进行多对多查询

  10. 10

    Jsonify Flask-SQLAlchemy Flask中的多对一关系

  11. 11

    通过Flask显示好友名称多对多sqlalchemy

  12. 12

    Flask-Sqlalchemy 3种多对多关系

  13. 13

    Flask-Sqlalchemy,多对多关系中的辅助表的主键

  14. 14

    我应该使用flask sqlalchemy多对多关系吗?

  15. 15

    Flask-SQLAlchemy筛选与父模型的多对多关系

  16. 16

    Flask-SQLAlchemy更新一对多记录

  17. 17

    如何使用flask-sqlalchemy多次插入多对多关系?

  18. 18

    Jsonify flask-sqlalchemy烧瓶中的多对一关系

  19. 19

    Flask-Sqlalchemy,多对多关系中的辅助表的主键

  20. 20

    在Flask sqlalchemy中订购一对多模型?

  21. 21

    Flask-SQLAlchemy查询带有多个必需标签的多对多标签

  22. 22

    Flask SQLalchemy-多对多-显示带有所有标签的照片(或包含所有帖子的博客等)

  23. 23

    使用Flask,WTForm,SQLAlchemy和Jinja2的完整多对一示例

  24. 24

    如何使用带有额外数据的Flask-sqlalchemy创建多对多关联?

  25. 25

    Flask-appbuilder多对多关系sqlalchemy.exc.NoReferencedTableError错误

  26. 26

    如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

  27. 27

    Flask / SQLAlchemy-多对多关系的关联模型和关联表之间的区别?

  28. 28

    使用多对多关系时,Flask-SQLAlchemy返回查询中的对象

  29. 29

    如何在SQLAlchemy(python,flask)中为模型用户创建多对多关系

热门标签

归档