问题标签 [pandas-to-sql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2209 浏览

python-3.x - Pandas to_sql '追加'到现有表会导致 Python 崩溃

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

这是我的代码:

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

这是我得到的错误:

根据这些错误,对我来说,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 函数吗?还是有其他事情发生?任何建议都会很棒!另外,如果有人有类似的问题,很高兴知道!

0 投票
0 回答
1475 浏览

pandas - 如何从 pandas.to_sql 插入中获取主键

我想使用 pandas .to_sql 命令将一些数据添加到数据库中。有没有一种方法可以获得插入对象的自动生成的主键,因为我需要它来创建外键?

到目前为止,我这样做了:

楷模:

向 db 添加点:

points.to_sql(Vertices._meta.db_table.lower(), con=engine, if_exists='append', index=False)

现在我想在 Face 表中为这些点创建一个外键:

非常感谢!

0 投票
1 回答
12593 浏览

python - Pandas to_sql() 更新数据库中的唯一值?

如何使用df.to_sql(if_exists = 'append')仅附加数据框和数据库之间的唯一值。换句话说,我想评估 DF 和 DB 之间的重复项,并在写入数据库之前删除这些重复项。

有这个参数吗?

我了解参数if_exists = 'append'if_exists = 'replace'是针对整个表格的 - 而不是唯一的条目。

我坚持这一点,所以非常感谢您的帮助。-谢谢

0 投票
0 回答
351 浏览

python - 找不到将熊猫数据框插入 MySql 的方法

所以基本上我有一个从 API 检索数据并生成包含列(数据、实时开始、值)的数据系列的函数,然后我有一个程序可以插入使用我的字典中的值命名的表。但是,我无法弄清楚如何将数据系列上传到这些表中。我尝试了很多方法,它要么从随机数据系列元素中输入值,要么给我一个错误:AttributeError: 'Timestamp' object has no attribute 'translate'

这是代码:

0 投票
1 回答
6679 浏览

python - pyodbc 到 sqlalchemy 的连接

我正在尝试将 pyodbc 连接切换到 sqlalchemy。工作的 pyodbc 连接是:

我试过了:

基于:http ://docs.sqlalchemy.org/en/latest/core/engines.html

并且:使用 SQLAlchemy 时 pandas.read_sql() 比 pyodbc 慢得多

(尝试使用 Trusted_Connection = Yes 建立连接)

但我收到消息:

OperationalError: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]No existe el servidor SQL Server o se ha denegado el acceso al mismo. (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')(此错误的背景: http ://sqlalche.me/e/e3q8 )(抱歉西班牙语,但它说 SQL Server 不存在)

我几乎可以肯定这与我不了解引擎连接的sintax有关。有人可以详细解释一下如何将连接从 pyodbc 转换为 sqlalchemy 吗?

提前致谢!

PD:我正在尝试实现 sqlalchemy,以便稍后在我的代码中使用pandas.DataFrame.to_sql(engine)

0 投票
2 回答
333 浏览

python - 加速 Pandas to_sql 方法

我正在尝试使用 Pandas 的 to_sql 方法通过循环将多个 csv 文件上传到 SQL Server 数据库中的相应表。

我的连接字符串和数据库连接工作正常;我通过前几个(和小)文件就好了。但是,当我点击包含约 135k 行的 file4 时,将所有数据上传到数据库需要将近一个小时。在阅读了有关 to_sql 的“chunksize”参数的文档后,我尝试降级到 Pandas 0.22 版,但没有加快进程。

任何有关如何提高速度的提示将不胜感激。谢谢你。

0 投票
0 回答
44 浏览

python - 如何解决 Pandas Series to sql 存储错误?

我正在尝试将 csv 文件导入熊猫数据框并将此数据框写入 PostgreSQL 数据库。但是,在将 Dataframe 写入 SQL 数据库后,最终 SQL 数据库中会出现不在 Dataframe 中的行。

原始数据文件包含一些存储为 None 的测量误差,我通过以下方式在 Dataframe 中将其替换为 NaN 值:

然后,我通过以下方式将 Dataframe 写入 SQL 数据库:

我使用 10000 的块大小,因为我尝试写入的总 Dataframe 包含 13.000.000 行。奇怪的部分来了,例如,我要写入 SQL 数据库的 Dataframe 中的第 60-68 行如下所示:

但在最终的 SQL 数据库中,相同的行 60-68 包含不同日期的新行(因此是 csv 文件),其中 None 值替换为 NaN:

这个奇怪的功能每 66 行出现一次,仅适用于 2017-03-25 的 csv 文件中包含 None 值并已被替换的 8 行。其余文件被正确处理,无值被替换而没有任何问题,其余数据帧存储到 SQL 数据库中。

任何人都知道这是如何发生的以及我能做些什么来解决它?我可以在最终的 SQL 数据库中删除这 8 行,但我想使用 python 脚本来获取更多数据文件。可能是由于替换函数中的 inplace = True 参数吗?还是由于大量行未正确写入数据库?

0 投票
0 回答
272 浏览

python - 无法使用 pandas 和 sqlalchemy 更改 VARCHAR 长度

我正在使用 pandas 将数据集动态插入 Redshift 数据库。

但是当我尝试更改 VARCHAR 字段的长度时,它似乎不起作用。

在 psql 中,当我要求时\d test,它返回:

该列0仍然只接受 256 个字符。

0 投票
1 回答
311 浏览

python - 如何为 pandas.DataFrame 编写 connection_object 以在 sql 中创建表

我正在尝试将 csv 文件(由 40 个标题和 4000 行组成)转换为 sql 数据库服务器中的表。我在某处读到,我可以用 2 行简单地做到这一点:

我试图使 conn 如下:

但它失败了,我得到了这些错误:

DatabaseError: 执行失败 sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无效对象名称“sqlite_master”。(208)(SQLExecDirectW);[42S02][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无法准备语句。(8180)“)

显然,我没有正确定义 conn 。但我不知道如何纠正它。

0 投票
1 回答
5926 浏览

sql-server - pandas.DataFrame.to_sql 插入数据,但不提交事务

我有一个 pandas 数据框,我正在尝试按照以下方式插入 MS SQL EXPRESS:

当我打电话时:

接着:

我可以看到数据正常,但它实际上并没有提交任何事务:

在此处输入图像描述

它在这里说我不必像 SQLAlchemy 那样提交:

Pandas DataFrame.to_sql() 函数是否需要后续的 commit()?

并且以下建议不起作用:

Pandas to_sql 没有在我的表中插入任何数据

我花了 3 个小时在整个互联网上寻找线索,但我没有得到任何相关的答案,或者我不知道如何提出问题。

任何关于寻找什么的指导将不胜感激。

更新

我可以使用 pyodbc 连接和完整的插入语句提交更改,但是带有 SQLAlchemy 引擎的 pandas.DataFrame.to_sql() 不起作用。无论是否指定了模式,它将数据发送到内存而不是实际的数据库。

我真的很感激这方面的帮助,或者可能是我需要报告的熊猫问题?