我的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()
是否有任何建议或暗示可以进行第三阶段?