使用SqlAlchemy在Python中检索ForeignKey映射对象

使用SqlAlchemy在Python中检索ForeignKey映射对象,python,mysql,orm,sqlalchemy,Python,Mysql,Orm,Sqlalchemy,我有一个现有的数据库,我正试图映射到SqlAlchemy的ORM中。我想让它找出数据库本身中已经存在的ForiegnKey关系 以下是我目前掌握的代码: from sqlalchemy import create_engine, MetaData, Table from sqlalchemy.orm import create_session from sqlalchemy.ext.declarative import declarative_base # connect to databa

我有一个现有的数据库,我正试图映射到SqlAlchemy的ORM中。我想让它找出数据库本身中已经存在的ForiegnKey关系

以下是我目前掌握的代码:

from sqlalchemy import create_engine, MetaData, Table 
from sqlalchemy.orm import create_session
from sqlalchemy.ext.declarative import declarative_base

# connect to database and infer from structure
Base = declarative_base()
engine = create_engine("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
metadata = MetaData(bind=engine)

class Club(Base):
    __table__ = Table('clubs', metadata, autoload=True)
    def __repr__(self):
        return "<Club: %s>" % (self.name,)

class Member(Base):
    __table__ = Table('members', metadata, autoload=True)
    def __repr__(self):
        return "<Member: %s of %d>" % (self.name, self.club_id)
我的问题是,例如,在
会员
\uuuuu repr\uuuuuuuu
功能中,我想打印俱乐部的
名称,而不是打印俱乐部id
(这对人类没有用)。类似于
member.club.name
的东西将是理想的选择


除非我定义了自己的表,而不仅仅是在代码中反映它们,否则我无法在SqlAlchemy文档上找到如何实现这一点,这就是我在这里要做的

只需将您的
成员
类更改为如下所示:

class Member(Base):
    __table__ = Table('members', metadata, autoload=True)
    club = relationship(Club, backref="members")
    def __repr__(self):
        return "<Member: %s of %s>" % (self.name, self.club.name)
类成员(基本):
__表\表('members',metadata,autoload=True)
俱乐部=关系(俱乐部,backref=“会员”)
定义报告(自我):
返回“”%(self.name,self.club.name)

关键是反射(
自动加载
)不会在类之间自动创建
关系
,因此您必须明确定义它们。

太好了!这会利用这个键上的所有索引吗?以及删除和更新的外键约束?数据库本身定义的内容将用于数据库级操作(FKs、索引等)。在这里,我们只是“告诉”SA有一段关系,并给它起了个名字。
class Member(Base):
    __table__ = Table('members', metadata, autoload=True)
    club = relationship(Club, backref="members")
    def __repr__(self):
        return "<Member: %s of %s>" % (self.name, self.club.name)