首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bulk_insert_mappings

使用bulk_insert_mappings
EN

Stack Overflow用户
提问于 2015-12-03 10:50:51
回答 2查看 10.1K关注 0票数 7

我正在尝试批量插入以下形式的大型字典列表:

代码语言:javascript
复制
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行代码,使用天真的假设,因为我有一个字典列表,所以这将是开箱即用的:

代码语言:javascript
复制
Session = sessionmaker(bind=engine)
s = Session()
s.bulk_insert_mappings(Results,results)

我的结果模型是:

代码语言:javascript
复制
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)

当我运行这段代码时,没有抛出任何错误,但是没有插入数据。

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

**编辑**

按照要求,此操作的导入内容为:

在进行调用的模块中:

代码语言:javascript
复制
os.environ['MPLCONFIGDIR'] = tempfile.mkdtemp()
import pandas as pd
from sqlalchemy.sql import label, distinct
from sqlalchemy.orm import joinedload_all
from .app import s, e

在flask app.py模块中:

代码语言:javascript
复制
import os
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base


# Define Flask app
app = Flask(__name__)
# grab main config from Flask-Appbuilder
app.config.from_pyfile('/Library/WebServer/wsgi/rest_api/cardioCatalogue/config.py')

from flask import current_app

URI = current_app.config['SQLALCHEMY_DATABASE_URI']

from threading import Lock

# Flask declarative base: defifne tables/models simultaneously
e = create_engine(URI, echo=True)
s = Session(e)

db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=e))
Base = declarative_base()
Base.query = db_session.query_property()
Base.metadata.create_all(e)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 00:53:55

缺少s.commit()

它像一个护身符一样工作,而且非常快!

票数 9
EN

Stack Overflow用户

发布于 2016-02-18 20:28:08

pymysql 0.7.1中的executemany有错误。已修复版本https://github.com/WorldException/PyMySQL或查看更改https://github.com/PyMySQL/PyMySQL/pull/427/files

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34057006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档