使用pymysql将mysql表替换为python中的数据框时行大小太大

Posted

技术标签:

【中文标题】使用pymysql将mysql表替换为python中的数据框时行大小太大【英文标题】:Row size is too large while replacing mysql table with dataframe from python using pymysql 【发布时间】:2021-06-08 01:32:46 【问题描述】:

我正在使用 pymysql to_sql 函数从 python 向 mysql 写入表。 我有 1000 行 200 列。

连接mysql的查询如下:

engine = create_engine("mysql://hostname:password#@localhostname/dbname")
conn = engine.connect()
writing query: df.to_sql('data'.lower(),schema=schema,conn,'replace',index=False)

我遇到以下错误:

OperationalError: (pymysql.err.OperationalError) (1118, 'Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.')

我已将列 dtypes 更改为字符串,但仍然出现错误。请帮我解决这个错误。

我正在尝试保存如下表。在这里,我提供了几列 创建表查询。我在保存时创建表时出错。 CREATE TABLE dbname.table name( 08:00:00文字, 08:08:00文字, 08:16:00文字, 08:24:00文字, 08:32:00文字, 08:40:00文字, 08:48:00文字, 08:56:00文字, 09:04:00文字, 09:12:00文字, 09:20:00文字, 09:28:00文字)

【问题讨论】:

请给出最小可行的代码。减少您的问题以显示仍然导致错误的示例。显示您尝试存储的 pandas 数据框 dfschema,至少在表 data 中。 to_sql 方法不是来自pymysql。它是来自 pandas 的数据框对象的一种方法。 pandas.pydata.org/docs/reference/api/… @Bennett Brown,好的,我会发布数据 percona.com/blog/2011/04/07/innodb-row-size-limitation。这包含许多针对您的问题的解决方案。特别是压缩的值得一看。由于数据量大,在我的最后重现这一点有点困难,否则我会尝试提供代码解决方案。 @BennettBrown,我提供了示例列 【参考方案1】:

错误不是由您的代码引起的。是你的Mysql服务器造成的

要解决问题,请更改 mysql 服务器的 my.ini 文本文件中的 innodb_log_file_size。

那么我相信这个错误会被修复。

innodb_log_file_size = 500M 
innodb_log_buffer_size = 800M
innodb_strict_mode = 0

【讨论】:

,我在 my.ini 中搜索了 innodb_log_file_size 但在 Innodb 选项卡中没有找到该选项。 innodb_log_file_size 和 innodb_buffer_file_size 一样吗? 不,它们不一样,你可以在你的文件中添加 innodb_log_file_size = 500M 和 innodb_log_buffer_size = 800M .. 然后试试 我在设置这些值时出错。SET GLOBAL innodb_log_file_size = 500M; 错误:``` 变量 innodb_log_file_size 是只读变量```。 mysql中的错误代码1238 我相信您已经更改了 my.ini 文件中的值并重新启动了 mysql srvr。这是你做的还是你试图在 mysql cmd 中设置 我已在 server>Optionsfile>Innodbtab 中将 innodb_log_buffer_size 更改为 800M,并在 Server>Optionsfile>Innodb 选项卡中标记了复选框。我没有在 Innodb 选项卡中找到 innodb_log_file_size 所以我在查询选项卡中使用了 mysql 查询。我已经使用任务管理器重新启动了 mysql。【参考方案2】:

尝试在 my.cnf 中设置以下值并重新启动 mysqld。我希望这可以帮助你。 详情请参阅以下链接。

 [mysqld]
 max_allowed_packet = 1G
 innodb_log_file_size = 2G
 innodb_log_buffer_size = 512M

Helpful link

【讨论】:

以上是关于使用pymysql将mysql表替换为python中的数据框时行大小太大的主要内容,如果未能解决你的问题,请参考以下文章

使用 pymysql 插入表

Python实现MySQL数据库连接---pymysql

Python数据库MySQL之数据备份pymysql模块

使用 pymysql 将 Python 连接到 mysql

48-mysql-Navicat数据库查询题目讲解(多表操作)python操作MySQLsql注入问题pymysql模块增删改查数据操作

python进阶(十mysql:PyMySQL)