使用bulk_insert_mappings

时间:2015-12-03 02:50:51

标签: python list dictionary sqlalchemy bulkinsert

我正在尝试批量插入表格的大型词典列表:

results = [{'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 1L}, 
           {'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 2L}, 
           {'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 3L},     
           {'attribute': u'SEX', 'value_d': 0.0, 'value_s': u'M', 'sid': 4L},
           ...
]

在阅读了关于' executemany'和bulk_insert_mappings,我决定尝试后者,因为它看起来更简单。

以下是执行此操作的3行代码,使用天真的假设,因为我有一个字典列表,这将开箱即用:

Session = sessionmaker(bind=engine)
s = Session()
s.bulk_insert_mappings(Results,results)

我的结果模型是:

class Results(db.Model):
    __tablename__ = 'results'
    id = Column(Integer, primary_key=True, autoincrement=True)
    sid = Column(Integer)
    attribute = Column(String(2048))
    value_s = Column(String(2048))
    value_d = Column(Float)

运行此操作时不会引发任何错误,但未插入数据。

现在不知道该怎么做......

2 个答案:

答案 0 :(得分:2)

缺少s.commit()

工作就像一个魅力,也非常血腥!

答案 1 :(得分:1)

pymysql 0.7.1有executemany的bug。 修正版https://github.com/WorldException/PyMySQL 或者查看更改https://github.com/PyMySQL/PyMySQL/pull/427/files