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