Mysql
 sql >> Database >  >> RDS >> Mysql

SQLAlchemy e join, non abbiamo chiavi esterne

Hai due opzioni. Puoi superare la condizione di adesione in join così:

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

Se lo stai definendo in termini di orm.relationship proprietà, il parametro della parola chiave sarà primaryjoin invece di onclause .

Tuttavia, l'approccio che preferisco è semplicemente mentire . Informa SQLAlchemy che esiste una chiave esterna, anche se non esiste.

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

SQLAlchemy procederà come se la chiave esterna fosse effettivamente presente, anche se il database effettivo non lo ha. Naturalmente, potresti avere problemi se il vincolo implicito della chiave esterna viene violato (comments.user_id quando non esiste un users.id corrispondente ), ma probabilmente saresti comunque nei guai.