Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQLAlchemy et joins, nous n'avons pas de clés étrangères

Vous avez deux options. Vous pouvez passer la condition de jointure dans join comme ceci :

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

Si vous définissez cela en termes de orm.relationship propriété, le paramètre de mot-clé sera primaryjoin au lieu de onclause .

Cependant, l'approche que je préfère consiste simplement à mentir . Informez SQLAlchemy qu'il existe une clé étrangère, même si ce n'est pas le cas.

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

SQLAlchemy procédera alors comme si la clé étrangère était en fait présente, même si la base de données réelle ne l'a pas. Bien sûr, vous pouvez rencontrer des problèmes si la contrainte de clé étrangère implicite est violée (comments.user_id lorsqu'il n'y a pas de users.id correspondant ), mais vous auriez probablement des ennuis de toute façon.