Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用sqlalchemy建模三个表之间的数据库多对多关系 让我们考虑Python中的SqLalCury的下列表模型。 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) 让我们考虑一下这些表的一些限制。(请不要质疑这个例子的意义,这是我想到的描述我想学习的最好的例子。:-) 一个工作者可能有多个项目要处理 一个项目可能分配了多个工人来处理它 对于每个元组(工作者,项目)您都有一个不同的评级_Python_Database Design_Model_Sqlalchemy_Relationship - Fatal编程技术网

在python中使用sqlalchemy建模三个表之间的数据库多对多关系 让我们考虑Python中的SqLalCury的下列表模型。 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) 让我们考虑一下这些表的一些限制。(请不要质疑这个例子的意义,这是我想到的描述我想学习的最好的例子。:-) 一个工作者可能有多个项目要处理 一个项目可能分配了多个工人来处理它 对于每个元组(工作者,项目)您都有一个不同的评级

在python中使用sqlalchemy建模三个表之间的数据库多对多关系 让我们考虑Python中的SqLalCury的下列表模型。 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) 让我们考虑一下这些表的一些限制。(请不要质疑这个例子的意义,这是我想到的描述我想学习的最好的例子。:-) 一个工作者可能有多个项目要处理 一个项目可能分配了多个工人来处理它 对于每个元组(工作者,项目)您都有一个不同的评级,python,database-design,model,sqlalchemy,relationship,Python,Database Design,Model,Sqlalchemy,Relationship,我明白,我有三种多对多关系。这些是: 工人和项目 工人和评级 评级和项目 定义两个表之间的多对多关系没有问题。我只需要将下面的关联表和关系添加到我的模型中 worker_project = Table('worker_project', METADATA, Column('worker_id', Integer, ForeignKey('workers.id')), Column('project_id'

我明白,我有三种多对多关系。这些是:

  • 工人和项目
  • 工人和评级
  • 评级和项目
  • 定义两个表之间的多对多关系没有问题。我只需要将下面的关联表和关系添加到我的模型中

    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')
    

    我没有做到的是,像上面描述的那样链接“评级”表。非常感谢您的帮助。

    将评级表做成这样

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

    如果我理解正确,也就是说。

    假设数据库中有一些数据,这就意味着:
    worker.rating\u id
    将为我提供一组一个worker的所有评级<代码>项目。rating_id将为我提供一组在特定项目中工作的所有工人的所有评分。对吗?给定一个工作人员和一个项目,我总是要计算
    worker.rating_id
    project.rating_id
    的交集,以获得给定作者在某个项目上的评分,对吗?如果你有一个workerid和一个projectid,你只需“从其中workerid=?和projectid=?”的评分中选择*并将为您提供“项目+工作者”组合的评级行(不知道如何将其转换为sqlalchemy语法)。我不认为你需要在工人和评级之间建立太多的关系。我假设你只希望每个(项目+工人)都有一个评级。这正是我想知道的,非常感谢!我会试试这个,看看结果如何。