简化后,我有以下类结构(在单个文件中):
Base = declarative_base()
class Item(Base):
__tablename__ = 'item'
id = Column(BigInteger, primary_key=True)
# ... skip other attrs ...
class Auction(Base):
__tablename__ = 'auction'
id = Column(BigInteger, primary_key=True)
# ... skipped ...
item_id = Column('item', BigInteger, ForeignKey('item.id'))
item = relationship('Item', backref='auctions')
我从中得到以下错误:
sqlalchemy.exc.InvalidRequestError
InvalidRequestError: When initializing mapper Mapper|Auction|auction, expression
'Item' failed to locate a name ("name 'Item' is not defined"). If this is a
class name, consider adding this relationship() to the Auction class after
both dependent classes have been defined.
我不确定 Python 是如何找不到 Item 类的,因为即使在传递类时,而不是将名称作为字符串传递,我也会遇到同样的错误。我一直在努力寻找如何与 SQLAlchemy 建立简单关系的示例,所以如果这里有明显的错误,我深表歉意。
原文由 Ross 发布,翻译遵循 CC BY-SA 4.0 许可协议
这一切都是因为我在 Pyramid 中设置 SQLAlchemy 的方式。本质上,您需要严格按照 本节 进行操作,并确保使用相同的
declarative_base
实例作为每个模型的基类。我也没有将数据库引擎绑定到我的
DBSession
这不会打扰你,直到你尝试访问表元数据,这在你使用关系时发生。