使用 SQLAlchemy 指定 pyODBC 选项(特别是 fast_executemany = True)
Specifying pyODBC options (fast_executemany = True in particular) using SQLAlchemy
我想在使用 SQLAlchemy 将行插入 table 时打开 pyODBC 驱动程序的 fast_executemany 选项。默认情况下它是并且代码运行非常慢......有人可以建议如何做到这一点吗?
编辑:
我正在使用 pyODBC 4.0.21 和 SQLAlchemy 1.1.13,我正在使用的代码的简化示例如下所示。
import sqlalchemy as sa
def InsertIntoDB(self, tablename, colnames, data, create = False):
"""
Inserts data into given db table
Args:
tablename - name of db table with dbname
colnames - column names to insert to
data - a list of tuples, a tuple per row
"""
# reflect table into a sqlalchemy object
meta = sa.MetaData(bind=self.engine)
reflected_table = sa.Table(tablename, meta, autoload=True)
# prepare an input object for sa.connection.execute
execute_inp = []
for i in data:
execute_inp.append(dict(zip(colnames, i)))
# Insert values
self.connection.execute(reflected_table.insert(),execute_inp)
对 pyodbc 试试这个
crsr = cnxn.cursor()
crsr.fast_executemany = True
从1.3版本开始,SQLAlchemy已经直接支持fast_executemany,例如
engine = create_engine(connection_uri, fast_executemany=True)
我想在使用 SQLAlchemy 将行插入 table 时打开 pyODBC 驱动程序的 fast_executemany 选项。默认情况下它是并且代码运行非常慢......有人可以建议如何做到这一点吗?
编辑:
我正在使用 pyODBC 4.0.21 和 SQLAlchemy 1.1.13,我正在使用的代码的简化示例如下所示。
import sqlalchemy as sa
def InsertIntoDB(self, tablename, colnames, data, create = False):
"""
Inserts data into given db table
Args:
tablename - name of db table with dbname
colnames - column names to insert to
data - a list of tuples, a tuple per row
"""
# reflect table into a sqlalchemy object
meta = sa.MetaData(bind=self.engine)
reflected_table = sa.Table(tablename, meta, autoload=True)
# prepare an input object for sa.connection.execute
execute_inp = []
for i in data:
execute_inp.append(dict(zip(colnames, i)))
# Insert values
self.connection.execute(reflected_table.insert(),execute_inp)
对 pyodbc 试试这个
crsr = cnxn.cursor()
crsr.fast_executemany = True
从1.3版本开始,SQLAlchemy已经直接支持fast_executemany,例如
engine = create_engine(connection_uri, fast_executemany=True)