Mysql 熊猫:唐';t秀
在python类中,我有通过SSH连接MySQL的代码:Mysql 熊猫:唐';t秀,mysql,pandas,ssh,jupyter-notebook,Mysql,Pandas,Ssh,Jupyter Notebook,在python类中,我有通过SSH连接MySQL的代码: def executeQuery(self, query_string): print("connecting to database " + self.sql_main_database) with SSHTunnelForwarder( ( self.ssh_host, self.ssh_port), s
def executeQuery(self, query_string):
print("connecting to database " + self.sql_main_database)
with SSHTunnelForwarder(
(
self.ssh_host,
self.ssh_port),
ssh_username = self.ssh_user,
ssh_pkey = self.pkey,
remote_bind_address=(self.sql_hostname, self.sql_port)
) as tunnel:
print("performing connection")
conn = pymysql.connect(
host="127.0.0.1",
user=self.sql_username,
password=self.sql_password,
db=self.sql_main_database,
port=tunnel.local_bind_port)
query = query_string
print("Querying")
data = pd.read_sql_query(query, conn)
print("Done!")
conn.close()
return data
代码运行良好,但当查询定义不好时,笔记本会冻结
然后,我尝试使用try/catch,代码的结尾如下
def executeQuery(self, query_string):
try:
with SSHTunnelForwarder(
(
self.ssh_host,
self.ssh_port
),
ssh_username = self.ssh_user,
ssh_pkey = self.pkey,
remote_bind_address=(self.sql_hostname, self.sql_port)
) as tunnel:
try:
conn = pymysql.connect(
host = "127.0.0.1",
user = self.sql_username,
password = self.sql_password,
db = self.sql_main_database,
port = tunnel.local_bind_port
)
try:
query = query_string
data = pd.read_sql_query(query, conn)
return data
except DatabaseError as e:
Log.debug(self,str(e))
raise DatabaseError
except pymysql.err.InternalError as e:
Log.debug(self, str(e))
raise DataError
except Exception as e:
Log.debug(self, "[Error]Setting up database: \'" + self.sql_main_database + "\'")
raise DataError
问题是pd.read\u sql\u查询永远不会停止,因此永远不会调用except,尝试不会失败,并且过程将永远继续
超时解决方案是不可能的,因为查询没有定义执行时间,其中一些查询可以在处理过程中停留几个小时
我不知道如何修复它。事实上,问题不在连接器上,只需要更新jupyter版本。您可以在PyMySQL中使用超时:超时解决方案是不可能的,因为查询没有定义执行时间,其中一些查询可以在几个小时内继续处理。