使用python中的sqlalchemy在三个表之间建立数据库的多对多关系

时间:2011-07-04 19:30:55

标签: python database-design model sqlalchemy relationship

让我们在python中考虑sqlalchemy的以下表模型。

class Worker(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Project(Base):
    id Column(Integer, primary = True)
    name Column(String, nullable = False)

class Rating(Base):
    id Column(Integer, primary = True)
    description Column(String, nullable = False)

让我们考虑对这些表的一些限制。 (请不要质疑这个例子的意义,这是我想出的最好的描述我想学的东西。: - ))

  1. worker可能有多个projects可供使用。
  2. project可能会分配多个workers来处理它。
  3. 对于每个元组(worker, project),您都有一个独特的rating
  4. 我明白,我有三对多关系。那些是:

    1. 工人和项目
    2. 工人和评级
    3. 评级和项目
    4. 我在定义两个表之间的多对多关系时没有问题。我只需要添加以下关联表和我的模型的实现。

      worker_project = Table('worker_project', METADATA,
                             Column('worker_id', Integer, ForeignKey('workers.id')),
                             Column('project_id', Integer, ForeignKey('projects.id')),
      
      class Worker(Base):
          # [...]
          papers = relationship('Project',
                                secondary=worker_project,
                                backref='workers')
      

      我所做的失败,就是如上所述链接表“评级”。感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

使评级表格如此。

  Rating
---------------------
  rating_id (primary key) 
  worker_id (foreign key - worker(worker_id)) 
  project_id (foreign key - project(project_id)) 
  description

如果我正确地理解了这一点。