, automap, .
Base.prepare name_for_scalar_relationship name_for_collection_relationship, , . (. AutomapBase.prepare() name_for_collection_relationship()) backref, .
:
from sqlalchemy import create_engine
from sqlalchemy.orm import Session,Mapper
from sqlalchemy.ext.automap import automap_base, name_for_collection_relationship
engine = create_engine('postgresql://user:pass@localhost:5432/dev')
Base = automap_base()
def _name_for_collection_relationship(base, local_cls, referred_cls, constraint):
if constraint.name:
return constraint.name.lower()
return name_for_collection_relationship(base, local_cls, referred_cls, constraint)
Base.prepare(engine, reflect=True, name_for_collection_relationship=_name_for_collection_relationship)
session = Session(engine,autocommit=True)
session.query(Base.classes.gmt_file).all()
, , gmt_file_a_fk gmt_file_b_fk.
. , name_for_scalar_relationship().
, . :
from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
class GmtFile(Base):
__tablename___ = 'gmt_file'
file_id = Column('file_id', Integer, primary_key=True)
a = Column('a', Integer, ForeignKey('CmnUser.user_id', name='gmt_file_a'))
b = Column('b', Integer, ForeignKey('CmnUser.user_id', name='gmt_file_b'))
gmt_file_a = relationship('CmnUser', foreign_keys=[a])
gmt_file_b = relationship('CmnUser', foreign_keys=[b])