使用 bulk_insert_mappings
Using bulk_insert_mappings
我正在尝试批量插入大量以下形式的词典:
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)
当我 运行 这样做时没有抛出任何错误,但是没有插入数据。
不知道现在该去哪里...
** 编辑 **
根据要求,为此导入的是:
在调用的模块中:
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 模块中:
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)
缺少 s.commit()
。
工作起来很有魅力,而且速度也非常快!
pymysql 0.7.1 有 executemany 的错误。
固定版本 https://github.com/WorldException/PyMySQL
或查看更改 https://github.com/PyMySQL/PyMySQL/pull/427/files
我正在尝试批量插入大量以下形式的词典:
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)
当我 运行 这样做时没有抛出任何错误,但是没有插入数据。
不知道现在该去哪里...
** 编辑 **
根据要求,为此导入的是:
在调用的模块中:
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 模块中:
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)
缺少 s.commit()
。
工作起来很有魅力,而且速度也非常快!
pymysql 0.7.1 有 executemany 的错误。 固定版本 https://github.com/WorldException/PyMySQL 或查看更改 https://github.com/PyMySQL/PyMySQL/pull/427/files