gpt4 book ai didi

sql-server - pyodbc:使用带有 TEXT/NTEXT 列的 fast_executemany 的内存错误

转载 作者:行者123 更新时间:2023-12-04 11:59:36 29 4
gpt4 key购买 nike

我在将行插入数据库时​​遇到问题。只是想知道是否有人知道为什么会发生这种情况?当我避免使用 fast_executemany 但插入变得非常慢时,它会起作用。

driver = 'ODBC Driver 17 for SQL Server'
conn = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server+ \
';UID=' + user+ ';PWD=' + password)
cursor = conn.cursor()
cursor.fast_executemany = True

insert_sql = """
INSERT INTO table (a, b, c)
VALUES (?, ?, ?)
"""

cursor.executemany(insert_sql, insert_params)

---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-12-e7e82e4d8c2d> in <module>
2 start_time = time.time()
3
----> 4 cursor.executemany(insert_sql, insert_params)

MemoryError:

最佳答案

fast_executemany 存在一个已知问题与 TEXT 一起工作时或 NTEXT列,如 GitHub here 上所述.

问题在于,当 pyodbc 查询数据库元数据以确定列的最大大小时,驱动程序返回 2 GB(而不是为 [n]varchar(max) 列返回的 0)。

pyodbc 为每个 [N]TEXT 分配 2 GB 的内存参数数组中的元素,Python 应用程序很快就会耗尽内存。

解决方法是使用 cursor.setinputsizes([(pyodbc.SQL_WVARCHAR, 0, 0)]) (如 here 所述)哄 pyodbc 治疗 [N]TEXT类似 [n]varchar(max) 的列列。

(鉴于 [N]TEXT 是 SQL Server 不推荐使用的列类型,因此不太可能正式修复此问题。)

关于sql-server - pyodbc:使用带有 TEXT/NTEXT 列的 fast_executemany 的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960016/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com