Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlalchemy在查询过程中失去连接_Python_Mysql_Pandas_Sqlalchemy - Fatal编程技术网

Python Sqlalchemy在查询过程中失去连接

Python Sqlalchemy在查询过程中失去连接,python,mysql,pandas,sqlalchemy,Python,Mysql,Pandas,Sqlalchemy,我正在做一个项目,它结合了一些基于注册用户的数据源。特别是一个问题给了我很多问题: import numpy as np import pandas as pd from pandas import Series, DataFrame from sqlalchemy import create_engine # of course, the info here is obscured prod_engine = create_engine('mysql+mysqlconnector://pas

我正在做一个项目,它结合了一些基于注册用户的数据源。特别是一个问题给了我很多问题:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from sqlalchemy import create_engine

# of course, the info here is obscured
prod_engine = create_engine('mysql+mysqlconnector://password@host:3306/database',pool_timeout=3600,pool_recycle=3600)

query_users = """
SELECT users.id,
CASE
    WHEN ((users.role = '' OR users.role IS NULL) AND users.plan LIKE 'pro%') OR users.role REGEXP '(pro|agent|manager)' THEN 'professional' ELSE 'consumer'
END AS 'modified_role',
users.created_at,
users.logged_in_at AS 'last_login',
COUNT(DISTINCT(folders.id)) AS 'folder_count',
IF(COUNT(DISTINCT(folders.id)) > 1, '2 or more','0 to 1') AS 'folder_group',
MIN(folders.created_at) AS 'first_folder_created',
MAX(folders.created_at) AS 'last_folder_created'
FROM users
LEFT OUTER JOIN folders
ON folders.created_by = users.id
AND folders.discarded = 0
AND folders.created_at >= '2010-11-30 23:59:59'
WHERE users.invalid_email IS NULL
GROUP BY 1"""

users = pd.read_sql_query(query_users, prod_engine)
无论我做了什么尝试,我都会出现这个错误(几乎总是在三秒之内,有时是瞬间)

我已经尝试了一些方法,比如为这里的文档添加
create\u engine
功能的
pool\u timeout
pool\u recycle
选项

我还尝试了
users=pd.read\u sql\u查询(query\u folder\u users,prod\u engine,chunksize=10000)
,但得到了相同的错误

有趣的是,每当我在Sequel Pro中运行这个查询时,它都可以正常工作;它立即开始返回行,只需约10秒即可完成。输出约为550000行

我还发现了很多其他的帖子,但似乎没有一篇能够满足我的需要:

在阅读这里的文档时,我注意到这一行:

有时,在查询数百万行时会出现“在查询过程中”表单 作为一个或多个查询的一部分发送。如果你知道这是 如果发生这种情况,您应该尝试从默认值增加网络读取超时 30秒到60秒或更长,足以存储数据 转到完成

看起来我可能需要更改此选项,但在SQLAlchemy文档中找不到任何提及此选项的内容


以前有人遇到过这个问题吗?如果是,您是如何修复的?

检查您的MySQL服务器的
max\u allowed\u packet\u size
变量并增加它。大多数情况下,当MySQL在查询过程中断开连接时,是因为负载太大。

当使用其他方法(例如GUI sql管理器)时,该查询是否有效?除了
mysqlconnector
(例如
pymysql
,检查您的选项)之外,您是否尝试过其他DBAPI?是的,使用Sequel Pro可以正常工作。但还没有尝试过mymysql。请尝试使用另一个DBAPI:对于pymysql,您可以通过在终端中运行
conda安装pymysql
来下载它(如果您没有Anaconda,则可以使用pip),然后在
create_engine
字符串中将
mysqlconnector
替换为
pymysql
。刚刚完全按照您编写的那样尝试,但现在遇到了一个新问题:“TypeError:format string的参数不够”(?)我使用的是相同的代码,只是将mysqlconnector替换为pymysql:-/
InterfaceError: (InterfaceError) 2013: Lost connection to MySQL server during query