评论使用游标对象和pymysql

时间:2019-11-20 07:24:41

标签: python flask flask-restful

在我的函数中,我这样访问数据库:

 def send_message(self, _name, _email, _message):
        if _name is None:
            custom_resp = {
                "message": "Error: No name provided",
                "status": 400
            }
            resp = jsonify(custom_resp)
            return resp
        if _email is None:
            custom_resp = {
                "message": "Error: No email provided",
                "status": 400
            }
            resp = jsonify(custom_resp)
            return resp
        if _message is None:
            custom_resp = {
                "message": "Error: No message provided",
                "status": 400
            }
            resp = jsonify(custom_resp)
            return resp
        try:
            if _name and _email and _message:
                # save edits
                sql = "INSERT INTO `contact`(`name`, `email`, `message`) VALUES(%s, %s, %s)"
                data = (_name, _email, _message)
                self.__con.checkConnectionStatus()
                cursor = self.__db.cursor(pymysql.cursors.DictCursor)
                cursor.execute(sql, data)
                self.__db.commit()
                if cursor.rowcount > 0:
                    custom_response = {
                        'status': 200,
                        'message': 'success',
                    }
                    resp = custom_response
                    return resp, 200
            else:
                custom_resp = {
                    "message": "Error: Could not proceed your request",
                    "status": 400
                }
                resp = jsonify(custom_resp)
                return resp
        except Exception as e:
            print(e)
        finally:
            if self.__con is not None:
                self.__con.closeConnection()

这段代码对我来说可以运行得很好。但是我得到的评论是:

  

在主体中创建了两个游标,最后要关闭的那一个,   他们有不同的存储位置?您可以在光标后放置“ try”   = self .__ db.cursor(pymysql.cursors.DictCursor)

self.__con.checkConnectionStatus()
                cursor = self.__db.cursor(pymysql.cursors.DictCursor)

是真的吗?我实际上没有看到任何问题,此评论可能无效。我在这里检查过:https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/tests/test_DictCursor.py 和这里: pymysql fetchall() results as dictionary? 他们都有相同的使用方式。 请给您指教!谢谢。

1 个答案:

答案 0 :(得分:0)

self.__con.checkConnectionStatus()
    cursor = self.__db.cursor(pymysql.cursors.DictCursor) #cursor1

`self .__ con.checkConnectionStatus()是多余的检查。您可以从代码中删除该行。

# self.__con.checkConnectionStatus() -> remove this
cursor = self.__db.cursor(pymysql.cursors.DictCursor) #cursor2

如果上面第二行的执行失败,将引发异常,并且将执行exceptfinally块。线路本身是对连接状态的检查,这就是使其冗余的原因。