2016-03-02 1 views
6

既存のデータからオンザフライでテーブルを作成しようとしていますが、必要なテーブルにはデュアルプライマリキーがあります。私は制限を満たす方法を見つけることができません。デュアルプライマリキーのためForeignKeyをマップできません

I.e.私は次のことをしようとすると、私は

...しかし、以下の両方は私にエラーを与える

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

...それは動作しますが、

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()), 
    ) 

...次の2つの表で始まります

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

答えて

3

あなたが指しているテーブルには複合プライマリキーがあり、複数のプライマリキーはありません。したがって、コンポジット・プライマリ・キーの各半分を指す2つの外部キーではなく、複合外部キーを作成する必要があります。

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

Beautiful。ありがとう! – RightmireM

関連する問題