python - Is it possible to declare relationship after class is created by automap in SqlAlchemy -


i'm new sqlalchemy. have followed tutorial create automap of existing db relationship mysql db

from sqlalchemy import create_engine, metadata, column, table, foreignkey sqlalchemy.ext.automap import automap_base, generate_relationship sqlalchemy.orm import relationship, backref config import constr, mytables  def _gen_relationship(base, direction, return_fn,                   attrname, local_cls, refferred_cls, **kw):     return generate_relationship(base, direction, return_fn, attrname, local_cls, refferred_cls, **kw)  engine = create_engine(constr) metadata = metadata() metadata.reflect(engine, only=mytables) base = automap_base(metadata=metadata) base.prepare(engine, reflect=true, generate_relationship=_gen_relationship) tableclass1 = base.classes.table1 tableclass2 = base.classes.table2 

table2.id maps 1 of table1's columns. when trying use query , join table1 , table2, reports error saying "can't find foreign key relationships". since know relationship of these 2 tables, there way me declare relationship after class instance has been created? or there way explicitly tell relationship in query function? thanks!

while possible in query @mpolednik mentioned, if read question correctly, ideal solution have relationship declared in classes repeated use.

it can achieved pre-declaring class wish use, so:

from sqlalchemy.ext.automap import automap_base sqlalchemy.orm import session, relationship sqlalchemy import create_engine, column, string  base = automap_base()  engine = create_engine("postgresql://user:pass@localhost:5432/mydb")  # pre-declare user 'user' table class user(base):     __tablename__ = 'user'      # override schema elements columns     oname = column('originalname', string)      # , relationship. name 'weird' because in database schema     # relationship makes absolutely no sense, demonstrate     # point     weird = relationship("usergroup",                          foreign_keys='usergroup.id',                          primaryjoin='and_(usergroup.id==user.id)')  base.prepare(engine, reflect=true) session = session(engine)  # test querying user table , following relationship u = session.query(user).filter(user.oname == 'testuser').one() print (u.oname) g in u1.weird:     print g.name 

see here docs (including example): http://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html?highlight=automap#specifying-classes-explicitly


Comments

Popular posts from this blog

php - Submit Form Data without Reloading page -

linux - Rails running on virtual machine in Windows -

php - $params->set Array between square bracket -