首页 > 解决方案 > Python Turbodbc executemanycolumns 错误:无法将 Python 实例转换为 C++ 类型(在调试模式下编译以获取详细信息)

问题描述

尝试将 executemanycolumns 与 SQL Server 一起使用时,我收到此错误:“无法将 Python 实例转换为 C++ 类型(在调试模式下编译以获取详细信息)”

我知道 Turbodbc 不喜欢 numpy 空值(NaN 或 NaT),所以要删除这些我使用:

df= df.where((pd.notnull(df)), 无)

然而,在运行这个之后,我得到一个错误,说一列不连续。这些总是 int64 数据类型的列。为了解决这个问题,我使用 arr.flags['C_CONTIGUOUS'] 检查每个数组,如果 False 则使用 np.ascontiguousarray(arr)。然后我再次收到“无法将 Python 实例转换为 C++ 类型(在调试模式下编译以获取详细信息)”错误。

我的数据框不包含 NaN 或 NaT。关于导致此错误的原因有什么想法吗?谢谢你的帮助!

标签: sql-serverpython-3.xpandasnumpyturbodbc

解决方案


所以这个答案绝对不是对为什么会发生这个错误的完整解释,而是基于我自己在解决这个问题时发现的。

首先我需要参考这篇很棒的文章,它给了我构建导出到 SQL 的功能https://medium.com/@erickfis/etl-process-with-turbodbc-1d19ed71510e

在本文的末尾有一些回复和问题,其中一些与您的问题有关。其中有一个响应,说他们将数据帧写入 csv,然后读取该 csv,然后运行 ​​Turbodbc 代码。

我不确定为什么这可能会消除您看到的错误 - 并且为了避免违反答案的 SO 规则,我不会放下我对正在发生的事情的猜测,因为它可能没有帮助!

我决定遵循这个建议,因为我不知所措,谢天谢地,它工作并在大约 17 秒内导出了我的整个数据帧(20975 行和 100 列)!!!

我在使用 Turbodbc 时看到其他错误时所做的其他一些事情如下(可能与此特定问题没有直接关系,但可能有助于您进一步了解其他问题):

  - update numpy to most recent version
  - install dlib from whl file here https://pypi.org/simple/dlib/
  - install CMake using pip install 

我希望这会有所帮助,并且其他人可以为您提供更全面的解释!


推荐阅读