Kayıtlı kullanıcılar bazında birkaç veri kaynağını birleştiren bir proje üzerinde çalışıyorum. Özellikle bir sorgu sorunların beni çok veriyor: Sqlalchemy, sorgu sırasında bağlantıyı kaybediyor
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://[email protected]: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)
olursa olsun ne denedim, bu hatayı alıyorum (üç saniye içinde hemen hemen her zaman, bazen anında).
InterfaceError: (InterfaceError) 2013: Lost connection to MySQL server during query
ben de çalıştı ama aynı hatayı alıyorum burada dokümanlar başına create_engine
fonksiyonu http://docs.sqlalchemy.org/en/latest/core/engines.html
-pool_timeout
ve pool_recycle
seçenekleri eklemek gibi bir kaç şey denedim.
İlginç olan şey, bu sorguyu Sequel Pro'da çalıştırdığımda iyi çalışıyor; Satırları hemen döndürmeye başlar ve sadece bitirmek için ~ 10 saniye sürer. Çıktı yaklaşık 550.000 satırdır.
Orada bulduğum diğer ipler/mesajların sayısı vardır, ama hiçbiri oldukça neye ihtiyacım ele görünüyor:
: https://groups.google.com/forum/#!topic/sqlalchemy/TWL7aWab9ww Handle SQLAlchemy disconnect http://blog.fizyk.net.pl/blog/reminder-set-pool_recycle-for-sqlalchemys-connection-to-mysql.htmlburada http://dev.mysql.com/doc/refman/5.5/en/error-lost-connection.html docs okuma, ben bu çizgiyi fark
Sometimes the “during query” form happens when millions of rows are being sent as part of one or more queries. If you know that this is happening, you should try increasing net_read_timeout from its default of 30 seconds to 60 seconds or longer, sufficient for the data transfer to complete.
Bu seçeneği değiştirmem gerekebilir gibi görünüyor, ancak SQLAlchemy belgelerinde buna değinen hiçbir şey bulamıyorum.
Daha önce bu soruna giren var mı? Eğer öyleyse, bunu nasıl düzelttiniz?
Bu sorgu farklı bir yöntem (ör., Bir GUI sql yöneticisi) kullanırken işe yarar mı? Mysqlconnector'dan farklı bir DBAPI denediniz mi (örneğin 'pymysql', seçenekleriniz için [buradan] (http://docs.sqlalchemy.org/en/rel_0_9/dialects/mysql.html#dialect-mysql) kontrol ediniz. ? – ari
Evet, Sequel Pro http://www.sequelpro.com ile iyi çalışıyor. Yine de mymysql denemedim. – measureallthethings
Başka bir DBAPI ile deneyin: pymysql için terminalde (ya da Anaconda yoksa pip) 'conda install pymysql' komutunu çalıştırarak ve' create_engine' dizginizdeki 'mysqlconnector'' pymysql' ile değiştirerek indirebilirsiniz. . – ari