3
讓我們考慮下python中sqlalchemy的表模型。在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)
讓我們考慮一下這些表的限制。 (不要問這個例子的意義,請,這是最好的我想出了來形容,我想學的東西。:-))
- 一個
worker
可能有多個projects
去努力。 - A
project
可能有多個workers
分配給它工作。 - 對於每個元組
(worker, project)
你有不同的rating
我明白,我有三個多對多的關係。這些都是:
- 工人和項目
- 工人和評價
- 評價和項目
我有定義多對多的關係兩個表之間沒有任何問題。我只需要添加下面的關聯表和一個關係到我的模型。
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')
我做失敗中,像上述鏈接表「評分」。任何幫助表示讚賞。
假設數據庫中有一些數據,這意味着:'worker.rating_id'會給我一組工人的所有評級。 'project.rating_id'會給我一組所有在特定項目上工作的工作人員的評分。對?給定一個工人和一個項目,我總是會計算'worker.rating_id'和'project.rating_id'的交集,以獲得給定作者在某個項目上的評分,對吧? – Aufwind
如果你有一個workerid和一個projectid,你只需要「選擇*從評級where workerid =?和projectid =?;」並會爲您提供該'project + worker'組合的評級行(不知道如何將其轉換爲sqlalchemy語法)。我認爲你不需要工人和評級之間的多重關係。 –
我假設你只想爲每個(項目+工作人員)順便一個評分。 –