python - 尝试使用 SQLAlchemy 关系
问题描述
例如,我有一个城市表和一个电影院表。一个城市有多个电影院,所以:
class City(Base):
__tablename__ = 'cities'
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(255))
theaters = relationship("Theater", backref=backref("theaters"))
class Theater(Base):
__tablename__ = 'theaters'
id = Column(Integer, primary_key=True)
city_id = Column(Integer, ForeignKey('cities.id'))
name = Column(VARCHAR(255), nullable=False)
现在我想获得一个城市的所有剧院:
theaters = db_session.query(City).filter_by(city = "New York").join(Theater.city_id).all()
此查询引发错误:
sqlalchemy.exc.ArgumentError: Join target Theater.city_id does not refer to a mapped entity
不知道我做错了什么?
解决方案
像这样的东西应该自动为你做连接:
class City(Base):
__tablename__ = 'cities'
id = Column(Integer, primary_key=True)
name = Column(VARCHAR(255))
theaters = relationship(
"Theater",
lazy='joined',
backref=backref("city") # This is how you refer to the city
# from theater. In other words, this adds
# a field "city" to the Theater class.
)
class Theater(Base):
__tablename__ = 'theaters'
id = Column(Integer, primary_key=True)
city_id = Column(Integer, ForeignKey('cities.id'))
name = Column(VARCHAR(255), nullable=False)
然后查询将是
ny_theaters = session.query(Theater).filter(Theater.city.has(City.name == 'New York')).all()
说得通?
推荐阅读
- python-3.x - 使用我用来抓取其他页面的相同代码显示两个不同的错误
- text-editor - 可以在 Geany 文本编辑器上阅读 .xtend
- java - 更新用作 SeekBar 的 JSlider 位置
- python - 最佳实践:断言方法的参数定位
- c# - ASP.NET Bootstrap 4 分页
- node.js - 身份验证流程:如何使用 API
- javascript - 解构错误,来自 fetch() 的响应
- php - 在 php 5.3 中搜索两个多维数组
- java - 使用 Object 类的 clone() 方法克隆对象
- javascript - 如何将对象传递给 VueJS 中的道具值