sql >> Base de Datos >  >> RDS >> Mysql

SQLAlchemy y uniones, no tenemos claves foráneas

Tienes dos opciones. Puede pasar la condición de unión en join así:

j = join(users, comments, onclause=users.c.id == commends.c.user_id)

Si está definiendo esto en términos de una orm.relationship propiedad, el parámetro de la palabra clave será primaryjoin en lugar de onclause .

Sin embargo, el enfoque que prefiero es simplemente mentir . Informe a SQLAlchemy que hay una clave externa, aunque no la haya.

comments = Table('comments', metadata,
    Column('id', Integer, primary_key=True),
    Column('user_id', Integer, ForeignKey('users.id')),
    ...
)

SQLAlchemy procederá como si la clave externa estuviera presente, aunque la base de datos real no la tenga. Por supuesto, puede tener problemas si se viola la restricción de clave externa implícita (comments.user_id cuando no hay un users.id correspondiente ), pero probablemente estarías en problemas de todos modos.