使用sqlalchemy的多表插入

时间:2018-10-20 03:34:37

标签: python mysql sqlalchemy

我的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)

现在,在我的代码中,我有一些航班数据,我想将它们插入航班表,甚至在提交之前也要取回记录的主键。

下面是我的情况

阶段1:处理原始数据,数据操作并准备好词典列表以准备插入飞行表 例子-

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

第2阶段:使用SQL Alchemy将数据插入飞行表

阶段3:获取阶段2中新插入记录的pkid列表

阶段4:将数据插入航空公司表,其中阶段3中的每个pkid都是航空公司表中的外键

阶段5:如果阶段4成功,则提交所有事务。其他回滚阶段2交易

从sqlalchemy文档中,我相信,与ORM风格相比,“ executemany”风格的核心插入是插入记录的最快方法,这使我想使用sqlalchemy核心插入选项。

但是通过使用核心插入,在实际提交之前,我是否会失去在阶段3中获取飞行记录主键的能力?还是有什么方法仍然可以获取主键?考虑到我要插入大量数据,如果我使用ORM样式,则可以刷新并获取主键,但是必须在性能上做出妥协吗?

我可能正在使用Dataframe.to_sql,但是它具有我不需要的自动提交功能

目前,我正在按照以下方式进行操作-

第1阶段

第二阶段

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

不确定如何执行阶段3。需要帮助

打算进行第4阶段

打算进行第5阶段-基于第4阶段的trans.commit() / trans.rollback()

是否有任何建议或暗示可以进行第三阶段?

0 个答案:

没有答案