Пропавшие без вести отношений внешнего ключа при отражении дб в SqlAlchemy

Я пытаюсь использовать SqlAlchemy (0.5.8) для взаимодействия через интерфейс с унаследованной базой данных декларативно и использую отражение. Мой тестовый код похож на это:

from sqlalchemy import *
from sqlalchemy.orm import create_session
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
engine = create_engine('oracle://schemaname:pwd@SID')
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)]

Который ясно указывает, что отражение взяло внешний ключ.

Где я иду не так, как надо?

5
задан nroam 21 July 2010 в 15:43
поделиться