Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQLAlchemy e joins, não temos chaves estrangeiras


Você tem duas opções. Você pode passar a condição de junção em join igual a:
j = join(users, comments, onclause=users.c.id == commends.c.user_id)

Se você estiver definindo isso em termos de um orm.relationship propriedade, o parâmetro de palavra-chave será primaryjoin em vez de onclause .

No entanto, a abordagem que prefiro é apenas mentir . Informe ao SQLAlchemy que existe uma chave estrangeira, mesmo que não exista.
comments = Table('comments', metadata,
    Column('id', Integer, primary_key=True),
    Column('user_id', Integer, ForeignKey('users.id')),
    ...
)

SQLAlchemy irá proceder como se a chave estrangeira estivesse de fato presente, mesmo que o banco de dados real não tenha isso. Claro, você pode ter problemas se a restrição implícita de chave estrangeira for violada (comments.user_id quando não há users.id correspondente ), mas você provavelmente estaria em apuros de qualquer maneira.