【问题标题】:Pandas MySQL exception don't showsPandas MySQL 异常不显示
【发布时间】:2021-01-14 08:27:59
【问题描述】:

我在 python 类中通过 SSH 连接到 MySQL 的代码:

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_sql_query 永远不会停止,因此永远不会调用 except,尝试不会失败,并且该过程将永远继续

超时解决方法是不可能的,因为查询没有定义的执行时间,其中一些可以在几个小时内保持处理。

我不知道如何解决它。

【问题讨论】:

标签: mysql pandas ssh jupyter-notebook


【解决方案1】:

确实问题不在连接器上,只是需要更新 jupyter 版本。

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2014-09-03
    • 1970-01-01
    • 2015-06-17
    • 2013-07-31
    相关资源
    最近更新 更多