使用sqlalchemy的多表插入

v1uwarro  于 2021-06-19  发布在  Mysql
关注(0)|答案(0)|浏览(232)

我有一个mysql表飞行如下-

pkid       from_city            to_city
 1         Melbourne            BuenosAires
 2         Budapest             Tokyo

我的sqlalchemy模型如下-

class Flight(Base):

    __tablename__ = 'flight'

    pkid = Column('pkid', INTEGER(unsigned=True), primary_key=True)
    from_city = Column('from_city', VARCHAR(50), nullable=False)
    to_city = Column('to_city', VARCHAR(50), nullable=False)

现在在我的代码中,我有一些flights数据,我想将它们插入flighttable,甚至在提交之前就可以得到我的记录的主键。
下面是我的设想
阶段1:处理原始数据、数据操作并准备好字典列表,以便插入飞行表示例-

records = [{'from_city': 'Amsterdam', 'to_city': 'Toronto'},
           {'from_city': 'Mumbai', 'to_city': 'Colombo'}]

阶段2:使用sql alchemy将数据插入flight表
第三阶段:找回你的名单 pkid 第二阶段新插入的记录
阶段4:将数据插入airline表,其中阶段3中的每个pkid都是airline表中的外键
阶段5:如果阶段4成功,提交所有事务。否则也将回滚第2阶段事务
从sqlalchemy文档来看,我认为与orm样式相比,executemany样式的核心插入是插入记录的最快方式,这使我想使用sqlalchemy核心插入选项。
但是通过使用核心插入,我是否会失去在实际提交之前获取阶段3中飞行记录主键的能力?或者还有什么方法可以得到主键?考虑到我有大量的数据要插入,如果我使用orm风格,我可以刷新并获取主键,但是我必须在性能上妥协?
我可以用 Dataframe.to_sql 但它带有自动提交功能,这是我不想要的
目前我是这样做的-
第一阶段
第2阶段

trans = connection.begin()
connection.execute(table.insert(), records)

不知道怎么做第三阶段。需要帮助吗
打算做第四阶段
准备进行第5阶段- trans.commit() / trans.rollback() 基于第4阶段
对第三阶段有什么建议或提示吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题