Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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 由于具有双主键,无法映射ForeignKey_Python_Sql Server_Sqlalchemy_Pymssql - Fatal编程技术网

Python 由于具有双主键,无法映射ForeignKey

Python 由于具有双主键,无法映射ForeignKey,python,sql-server,sqlalchemy,pymssql,Python,Sql Server,Sqlalchemy,Pymssql,我正在尝试从现有数据动态创建表……但是,我需要的表有两个主键。我找不到如何满足这些限制 也就是说,我从以下两个表格开始 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_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()),
    )
当我尝试以下方法时,它是有效的

t = Table('testtable', METADATA,
    Column('ErxID', INTEGER(), ForeignKey('DDB_ERX_MEDICATION_BASE.ErxID')),
    )     
t.create()
但是,以下两项都给出了错误…

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


您指向的表具有复合主键,而不是多个主键。因此。您需要创建复合外键,而不是指向复合主键每一半的两个外键:

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