在我的函数中,我这样访问数据库:
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? 他们都有相同的使用方式。 请给您指教!谢谢。
答案 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
如果上面第二行的执行失败,将引发异常,并且将执行except
和finally
块。线路本身是对连接状态的检查,这就是使其冗余的原因。