【发布时间】:2019-11-27 18:15:54
【问题描述】:
我正在尝试通过 pyodbc 小批量将 pandas 数据帧中的数据插入 Teradata 表中。
我能够成功插入一小部分数据样本集,但是当我尝试插入整个数据帧(大约 125k 行)时,我收到了以下错误消息:[Teradata][ODBC Teradata Driver] SQL 请求超出了允许的最大值长度为 1 MB。
在做了一些研究之后,我的插入语句似乎太大了,所以我想把它分解成更小的批量大小。我研究了 cursor.executemany 和它的必要参数,但我能够找到任何地方来定义批量大小。
import pyodbc
import pandas as pd
# Delete All Records pertaining to Max Report Month
cursor = connection.cursor()
sql_del = "DELETE FROM database.table WHERE RPT_MTH = '" + max_mth + "';"
cursor.execute(sql_del)
connection.commit()
# Insert All Predictions
data = df_prod.values.tolist()
cursor.fast_executemany = True
cursor.executemany('INSERT INTO database.table VALUES (?,?,?,?)', data)
connection.commit()
# Close Connections
cursor.close()
connection.close()
【问题讨论】:
-
你试过
df_prod.to_sql('table', engine, schema='database', if_exists='append', index=False, chunksize=1000)...吗? -
@GordThompson 我明白了,我还没有尝试过这个。我将如何导出引擎?我的连接是这样派生的:
user = 'user' pasw = 'pasw' host = 'host' connection = pyodbc.connect('DRIVER=Teradata;DBCNAME=' + host + ';UID=' + user + ';PWD=' + pasw + ';QUIETMODE=YES' ,autocommit = True ,unicode_results = True) -
Teradata 建议使用他们自己的 SQLAlchemy 方言。详情here.
-
@GordThompson,感谢您提供的信息。我按照说明安装了必要的库。但是,我不断收到错误消息:NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:teradata 你以前遇到过这种情况吗?
-
我自己不使用 Teradata,但this issue 看起来很相似。