我有两个相关的表已经填充了数据(使用 SQLAlchemy ORM)。但是,目前还没有链接各个记录,即外键列是空的。我需要根据不同列的匹配来批量更新外键列。
为了显示:
class Location(Base):
__tablename__ = 'locations'
id = Column(Integer, primary_key=True)
x = Column(Float)
y = Column(Float)
class Stopover(Base):
__tablename__ = 'stopovers'
id = Column(Integer, primary_key=True)
x = Column(Float)
y = Column(Float)
location_id = Column(Integer, ForeignKey("locations.id"))
location = relationship("Location", backref=backref("stopovers"))
因此,基本上,我需要通过匹配“x”和“y”列,将 20,000 多个“中途停留”记录中的每一个与“位置”相关联——即批量更新 location_id 列。
此代码正确生成 _location_id_:
for stpvr in session.query(Stopovers).all():
stpvr.location_id = session.query(Location.id).\
filter_by(x=stpvr.x).\
filter_by(y=stpvr.y).one()[0]
session.commit()
但是,它似乎不起作用 - 通过 Sqliteman 探索数据库显示 location_ids 尚未更新。此外,我猜肯定有一种更优雅的方式来解决这个问题。
在文档中,我发现相关更新最接近我正在寻找的内容。但是,文档仅引用 SQL 表达式语言,而我使用的是 ORM。我是 SQLAlchemy 的新手,我尝试将文档转换为 ORM 并没有成功。
对于找到执行此批量更新的最优雅方式的任何帮助,我将不胜感激。提前致谢。