Pandas to_sql“附加”到现有表导致Python崩溃

2024-01-12

我的问题本质上是这样的:当我尝试将 to_sql 与 if_exists = 'append' 一起使用并且名称设置为 SQL Server 上已存在的表时,Python 崩溃。

这是我的代码:

@event.listens_for(engine, 'before_cursor_execute') def receive_before_cursor_execute(conn, cursor, statement, params, context, executemany):
    if executemany:
        cursor.fast_executemany = True

df.to_sql(name = 'existingSQLTable', con = engine, if_exists = 'append', index = False, chunksize = 10000, dtype = dataTypes)

我没有包含它,但 dataTypes 是所有列名称及其数据类型的字典。

这是我得到的错误:

    Traceback (most recent call last):
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1116, in _execute_context
        context)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 447, in do_executemany
        cursor.executemany(statement, parameters)
    pyodbc.IntegrityError: ('23000', "[23000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Violation of PRIMARY KEY constraint 'PK__existingSQLTable__'. Cannot insert duplicate key in object 'dbo.existingSQLTable'. The duplicate key value is (20008.7, 2008-08-07, Fl). (2627) (SQLExecute); [23000] [Microsoft][SQL Server Native Client 11.0][SQL Server]The statement has been terminated. (3621)")

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
      File "<pyshell#24>", line 1, in <module>
        Table.to_sql(name = 'existingSQLTable', con = engine, if_exists = 'append', index = False, chunksize = 10000, dtype = dataTypes)
      File "C:\Apps\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1165, in to_sql
        chunksize=chunksize, dtype=dtype)
      File "C:\Apps\Anaconda3\lib\site-packages\pandas\io\sql.py", line 571, in to_sql
        chunksize=chunksize, dtype=dtype)
      File "C:\Apps\Anaconda3\lib\site-packages\pandas\io\sql.py", line 1250, in to_sql
        table.insert(chunksize)
      File "C:\Apps\Anaconda3\lib\site-packages\pandas\io\sql.py", line 770, in insert
        self._execute_insert(conn, keys, chunk_iter)
      File "C:\Apps\Anaconda3\lib\site-packages\pandas\io\sql.py", line 745, in _execute_insert
        conn.execute(self.insert_statement(), data)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 914, in execute
        return meth(self, multiparams, params)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\sql\elements.py", line 323, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1010, in _execute_clauseelement
        compiled_sql, distilled_params
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1146, in _execute_context
        context)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1341, in _handle_dbapi_exception
        exc_info
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 202, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 185, in reraise
        raise value.with_traceback(tb)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1116, in _execute_context
        context)
      File "C:\Apps\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 447, in do_executemany
        cursor.executemany(statement, parameters)

根据这些错误,对我来说,标志 fast_executemany 似乎有问题,但我已经阅读了很多有关它的文档,但没有发现它有任何问题。

可能值得注意的事情:

  1. 使用 if_exists = 'replace' 尚不存在的表按预期工作
  2. 使用 if_exists = 'append' 尚不存在的表按预期工作
  3. 已存在的表 if_exists = 'replace' 按预期工作
  4. 我的 DataFrame 大约有 300 万行和 25 列(主要是浮点数和一些短字符串)
  5. 我可以成功写入绝对最大 900,000 行,而不会导致 python 崩溃。
  6. 我正在使用 SQL Server、pandas 0.23.3、pyodbc 4.0.23(我在 4.0.22 中也遇到了相同的错误)、Jupyter Notebook(我也在 IDLE 中尝试过,得到了相同的结果)、Windows 10、 Python 3.5.1 和 Anaconda 3。

对我来说,显而易见的解决方案是将 DataFrame 分成 900,000 行的块。虽然第一个块已成功上传,但在 python 崩溃的情况下,我什至无法向其附加一行。

这个错误是否是旨在加速该过程的代码的结果(它的效果非常出色)?我是否误解了 to_sql 函数?还是还有其他事情发生?任何建议都会很棒!另外,如果有人遇到类似的问题,很高兴知道!


正如@Jon Clements 所解释的,问题在于有些行具有相同的主键(但行本身并不相同)。我使用了 pandas df.drop_duplicates 函数,并将子集参数设置为主键列。这解决了违反 PK 错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas to_sql“附加”到现有表导致Python崩溃 的相关文章

  • pandas 替换列子集的空值

    我有一个包含许多列的数据框 例如 df name salary age title John 100 35 eng Bill 200 NaN adm Lena NaN 28 NaN Jane 120 45 eng 我想替换工资和年龄中的空值
  • 存储过程 EXEC 与 sp_executesql 的区别?

    我写了两个存储过程 其中一个是sp executesql而其他没有 sp executesql 两者都正确执行相同的结果 我不明白两者之间有什么区别 EXEC SQL 与 EXEC sp executesql SQL N eStatus v
  • 在 Selenium 中自动执行下拉菜单而不选择

    我正在尝试使用 Selenium 从下拉列表中选择一个元素 我已经能够选择下拉列表 但我不知道如何从下拉列表中选择特定元素 因为该网站不使用 select 因此我无法使用内置的 select 类 作为参考 这是下拉列表中元素之一的 HTML
  • 将黑白图像完全转换为一组线条(也称为仅使用线条进行矢量化)

    我有许多黑白图像 想将它们转换为一组线条 这样我就可以完全或至少接近完全地从线条重建原始图像 换句话说 我试图将图像矢量化为一组线条 我已经看过了霍夫线变换 https docs opencv org2 4 modules imgproc
  • 在时间序列线图上绘制点

    我有这个数据框 我想绘制它的线图 正如我所绘制的 Graph is 生成的代码是 fig ax plt subplots figsize 15 5 date time pd to datetime df Date df df set ind
  • Travis-ci 和 Gobject 内省

    我正在尝试设置 Travis获取 GNOME https github com getting things gnome gtg My travis yml https github com getting things gnome gtg
  • 使用 Python 请求通过 POST 请求发送图像

    我目前正在尝试使用 Python 3 5 和 Requests 库来发送 POST 请求 此 POST 将发送一个图像文件 这是示例代码 import requests url https api address files files o
  • 将行转换为 pandas 中逗号分隔的字符串

    我有一个熊猫数据框 from pandas import DataFrame import pandas as pd df2 DataFrame a one one two two three two one six b x y z y x
  • Pandas 中的 Vlookup 具有近似匹配

    我需要对两个 pandas 数据框进行 vlookup 样式操作 Excel 中的 Vlookup 函数有一个额外的参数 是否应查找近似匹配或精确匹配 为了精确匹配 我知道我可以使用 join 函数 但是我该如何进行近似匹配以找到下一个更大
  • 如何计算 pandas 系列中到前一个零的距离?

    我有以下 pandas 系列 以列表形式表示 7 2 0 3 4 2 5 0 3 4 我想定义一个新的系列 返回到最后一个零的距离 这意味着我想要以下输出 1 2 0 1 2 3 4 0 1 2 如何以最有效的方式在 pandas 中做到这
  • 使用 Opencv 屏蔽水平线和垂直线

    我正在尝试删除该图像中的水平线和垂直线 以便拥有更清晰的文本区域 我正在使用下面的代码 它遵循这个guide https docs opencv org 3 2 0 d1 dee tutorial moprh lines detection
  • 适用于 Python 的旧版本 Windows 二进制库 Wheel 的存储库?

    作为很多用户 我使用很棒的Christopher 的 Windows 二进制轮子 http www lfd uci edu gohlke pythonlibs vlfd当尝试在 Windows 上安装一些 python 包 例如 GDAL
  • 使用字典来键入一系列值[重复]

    这个问题在这里已经有答案了 我有一个 pandas 数据框 我想根据另一列的值在新列中创建类别 我可以通过这样做来解决我的基本问题 range range 0 5 Below 5 range 6 10 between range 11 10
  • 如何在 pandas 数据框中移动日期(添加 x 个月)?

    我有一个包含日期列的数据框 我知道如何将日期移动固定的月份数 例如 向 x 列中的所有日期添加 3 个月 但是 我无法弄清楚如何将日期移动几个月 这不是固定的 而是数据框的另一列 有任何想法吗 我在下面复制了一个最小的例子 我得到的错误是
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • python-polars 通过分隔符将字符串列拆分为许多列

    在 pandas 中 以下代码会将 col1 中的字符串拆分为许多列 有没有办法在极地做到这一点 d col1 a b c d a b c d df pd DataFrame data d df a b c d df col1 str sp
  • 使用 python 只读取 Excel 中的可见行

    我想只读取 python 中 Excel 工作表中的可见行 输入 Excel表 所以当我过滤时 作为 python 中的输出 在本例中我将仅获得可见数据 1 行 这是我的代码 from openpyxl import load workbo
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Python Camelot无边框表格提取问题

    我正在努力从 pdf 文件中提取一些无边框表格 如下图所示 我已经安装了 python camelot 如图所示here https github com socialcopsdev camelot并且仅适用于有边框的表格 请参阅以下详细信
  • Facebook Messenger 机器人的日期选择器 webview - 无法将字段值带回机器人的输入字段

    我正在使用 Dialogflow 和 Messenger 开发聊天机器人 Webhook 是用 Python 3 x 编写的 我面临着如何再次将数据从 webview 传输到信使聊天窗口以继续与用户对话的问题 Messenger 聊天机器人

随机推荐

  • Quarkus 自定义授权拦截器

    我有一个 Quarkus 微服务 使用 quarkus oidc 和 quarkus keycloak authorization 扩展通过 Keycloak 进行身份验证和授权 我需要另外实现以下两个请求拦截器 过滤器 任何身份验证逻辑启
  • 如何阻止 ejabberd 使用 mnesia [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试建立一个将数据库从崩溃的服务器恢复到新服务器的过程 我的服务器正在运行 Ejabberd 作为 XMPP 服务器 并且我将其配置为使用 po
  • Sublime Text 中 >= 和 <= 运算符的语法高亮显示

    我正在尝试为 Matlab 运算符获得正确的语法突出显示 gt and lt 目前 仅 lt and gt 被突出显示 而不是 但例如 被突出显示 我看过Matlab tmLanguage文件 以及两者 gt and lt 包含在运算符正则
  • 向 CreateThread 传递多个参数

    问题 How to pass具体来说two论点创建线程 http msdn microsoft com en us library ms682453 VS 85 aspx when 参数一 类型SOCKET 论证二 一个接口指针 COM S
  • Django 文件字段编码

    我有一个 django 模型如下 class ExportFile BaseExportFile created timestamp models DateTimeField auto now True editable False dat
  • 使用 d3.js 制作分组条形图

    我是 d3 js 的新手 我发现很难创建分组条形图 但我尝试了一些似乎不正确的方法 我想要 x 轴上的月份和 y 轴上的组数 火星和木星 像这样的东西Link https i stack imgur com VowEA png var sv
  • 在 Jsch 中设置 ASCII 模式

    我需要解决当前遇到的 Unix Windows 文件格式 LF 到 CRLF 问题 我使用的 ftp 客户端是 Jcraft 的 Jsch 在线文档非常简单 尽管我遇到了一个可以设置的标志 SSH FXF TEXT MODE 启用 ASCI
  • 类方法无法访问属性

    我创建了一个像这样的类 function MyClass var myInt 1 MyClass prototype EventHandler function e alert this myInt 不幸的是 this是触发的事件 在我的例
  • 如何将大型多维数组部分写入 HDF5 文件?

    我在 C 中使用 HDF5DotNet 并且有一个非常大的数组 几个 GB 我想将其写入 HDF5 文件 它太大了 无法将整个内容存储在内存中 因此我一次生成它的区域并想将它们写出来 但在读回时仍然让它看起来像一个大数组 我知道 HDF5
  • 背景图像占窗口的 100%(并随之调整大小)

    重复 拉伸和缩放 CSS 背景 https stackoverflow com questions 376253 stretch and scale css background 如何拉伸背景图像以覆盖整个 HTML 元素 https st
  • PHP 对象数组不是线性缩放的,而全局数组却可以?

    使用对象内数组作为属性与使用全局 php 数组变量相比 存在一个主要的性能问题 为什么 为了对这个问题进行基准测试 我创建了以下基准测试 它存储一个越来越大的数组 并以 stdClass 作为节点 运行了两个测试 一个使用类中的数组属性 另
  • 如何阅读Haskell中内置函数的实现代码/源代码?

    例如 如果我想阅读默认的源代码curryPrelude 中的函数 我在哪里引用 有没有办法阅读它的实现 我尝试在Hoogle中搜索它 但它没有给出确切的实现 只是给出了输入和输出类型 我在堆栈上使用 GHCI 来运行 haskell 胡格尔
  • SQL查询的执行顺序

    我对该查询的执行顺序感到困惑 请解释一下 我对何时应用联接 调用函数 随案例添加新列以及何时添加序列号感到困惑 请解释这一切的执行顺序 select Row number OVER ORDER BY SELECT 1 AS Serial N
  • sql server 中的多个 NOT LIKE

    我有一张像这样的桌子 id name 302345 Name1 522345 Name2 1X2345 Name3 2X2345 Name4 1X8765 Name5 2X2123 Name6 502345 Name7 M62345 Nam
  • 为什么食谱在看起来没有必要时提倡重写 getItemViewType 和 getViewTypeCount ?

    我一直在学习 Commonsware Android 编程教程 在教程 5 额外学分 2 中 挑战是根据对象的 类型名称 餐厅的 类型 属性 使用多种布局在 ListView 中显示行 这是一个字符串 因此 它建议重写getItemView
  • 替换lua中包含特殊字符的字符串

    我想替换lua中的字符串 这是字符串 strng begin matrix 1 2 3 4 5 6 7 8 10 end matrix 我想更换 begin matrix by by by end matrix by 我还想删除所有空格 所
  • Python 3 静态成员

    我正在努力实现以下目标 class A username None username get username def get username self if username is None try uname os environ U
  • npm 命令 - 是否需要 sudo?

    目前我总是跑步sudo npm install
  • 如何模仿描述输出?

    想象一下水果类 class Fruit NSObject override var description String return super description var apple Fruit var banana Fruit p
  • Pandas to_sql“附加”到现有表导致Python崩溃

    我的问题本质上是这样的 当我尝试将 to sql 与 if exists append 一起使用并且名称设置为 SQL Server 上已存在的表时 Python 崩溃 这是我的代码 event listens for engine bef