SqlAlchemy (0.5.8)를 사용하여 선언적으로 레거시 데이터베이스와 상호 작용하고 리플렉션을 사용하려고합니다. 내 테스트 코드는 다음과 같습니다SqlAlchemy에서 db를 반사 할 때 외래 키 관계가 누락 됨
from sqlalchemy import *
from sqlalchemy.orm import create_session
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('oracle://schemaname:[email protected]')
meta = MetaData(bind=engine)
class CONSTRUCT(Base):
__table__ = Table('CONSTRUCT', meta, autoload=True)
class EXPRESSION(Base):
__table__ = Table('EXPRESSION', meta, autoload=True)
session = create_session(bind=engine)
을 지금이 (가) (기본 오라클 스키마에 외래 키 제약 조건에 의해 정의)이 두 테이블 사이의 조인을 사용하여 쿼리를 실행하려고 할 때 :
print session.query(EXPRESSION).join(PURIFICATION)
... 기쁨 없습니다 : 그러나
sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships between 'EXPRESSION' and 'PURIFICATION'
:
>>> EXPRESSION.epiconstruct_pkey.property.columns
[Column(u'epiconstruct_pkey', OracleNumeric(precision=10, scale=2, asdecimal=True,
length=None), ForeignKey(u'construct.pkey'), table=<EXPRESSION>, nullable=False)]
>>> CONSTRUCT.pkey.property.columns
[Column(u'pkey', OracleNumeric(precision=38, scale=0, asdecimal=True, length=None),
table=<CONSTRUCT>, primary_key=True, nullable=False)]
반사가 외래 키를 선택했음을 분명하게 나타내는 문구.
어디로 잘못 가고 있습니까?