python - support - sqlalchemy sql server tutorial
No se puede asignar ForeignKey debido a llaves principales duales (1)
La tabla a la que apunta tiene una clave primaria compuesta , no múltiples claves primarias. Por lo tanto. necesita crear una clave externa compuesta, no dos claves externas que apuntan a cada mitad de la clave primaria compuesta:
t = Table(''testtable'', METADATA,
Column(''PATID'', INTEGER()),
Column(''PATDB'', INTEGER()),
ForeignKeyConstraint([''PATID'', ''PATDB''], [''DDB_PAT_BASE.PATID'', ''DDB_PAT_BASE.PATDB'']),
)
t.create()
Intento crear tablas sobre la marcha a partir de datos existentes ... sin embargo, la tabla que necesito tiene dos claves principales. No puedo encontrar cómo satisfacer las restricciones.
Es decir, empiezo con las siguientes dos tablas ...
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()),
)
Cuando intento lo siguiente, funciona ...
t = Table(''testtable'', METADATA,
Column(''ErxID'', INTEGER(), ForeignKey(''DDB_ERX_MEDICATION_BASE.ErxID'')),
)
t.create()
Sin embargo, los dos siguientes me dan el error ...
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'']