Impossible de mapper ForeignKey en raison de deux keys primaires

J'essaie de créer des tables à la volée à partir de données existantes … cependant, la table dont j'ai besoin a deux keys primaires. Je ne peux pas find comment satisfaire les ressortingctions.

Je commence par les deux tables suivantes …

self.DDB_PAT_BASE = Table('DDB_PAT_BASE', METADATA, Column('PATID', INTEGER(), primary_key=True), Column('PATDB', INTEGER(), primary_key=True), Column('FAMILYID', INTEGER()), ) self.DDB_ERX_MEDICATION_BASE = Table('DDB_ERX_MEDICATION_BASE', METADATA, Column('ErxID', INTEGER(), primary_key=True), Column('ErxGuid', VARCHAR(length=36)), Column('LastDownload', DATETIME()), Column('LastUpload', DATETIME()), Column('Source', INTEGER()), ) 

Quand j'essaie ce qui suit, ça marche …

 t = Table('testtable', METADATA, Column('ErxID', INTEGER(), ForeignKey('DDB_ERX_MEDICATION_BASE.ErxID')), ) t.create() 

Cependant, les deux qui suivent me donnent l'erreur …

 t = Table('testtable', METADATA, Column('PATID', INTEGER(), ForeignKey('DDB_PAT_BASE.PATID')), ) t.create() t = Table('testtable', METADATA, Column('PATID', INTEGER(), ForeignKey('DDB_PAT_BASE.PATID')), Column('PATDB', INTEGER(), ForeignKey('DDB_PAT_BASE.PATDB')), ) t.create() 

 sqlalchemy.exc.OperationalError: (pymssql.OperationalError) (1776, "There are no primary or candidate keys in the referenced table 'DDB_PAT_BASE' that match the referencing column list in the foreign key 'FK__testtabl__PATID__3FD3A585'.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n") [SQL: '\nCREATE TABLE [testtable] (\n\t[PATID] INTEGER NULL, \n\tFOREIGN KEY([PATID]) REFERENCES [DDB_PAT_BASE] ([PATID])\n)\n\n'] 

La table que vous pointez a une key primaire composite et non plusieurs keys primaires. Par conséquent. vous devez créer une key étrangère composite, et non deux foreign keys pointant vers chaque moitié de la key primaire composite:

 t = Table('testtable', METADATA, Column('PATID', INTEGER()), Column('PATDB', INTEGER()), ForeignKeyConstraint(['PATID', 'PATDB'], ['DDB_PAT_BASE.PATID', 'DDB_PAT_BASE.PATDB']), ) t.create()