MySQL,我应该在需要时保持连接还是连接?

时间:2013-10-06 12:29:17

标签: python mysql

我一直在家中记录MySQL数据库的温度(每5分钟读取10个传感器),并且一直在使用Python,但我想知道一些事情......

目前,当我第一次运行程序时,我运行正常连接到MySQL,只运行一次。

db = MySQLdb.connect(mysql_server, mysql_username, mysql_passwd, mysql_db)
cursor = db.cursor()

然后我收集数据并成功将其发布到数据库。然后脚本会休眠5分钟,然后再次启动并再次收集和发布数据,依此类推。但是,我只连接一次,我永远不会断开连接;它只是继续循环。如果我终止程序,我只会断开连接。

这是最佳做法吗?也就是说,保持连接始终打开到MySQL服务器,或者在完成插入/提交后我应该断开连接吗?

我问的原因是:我不得不重新启动脚本,因为我的MySQL服务器可能已脱机或出现其他问题。我应该:

  • 继续做我正在做的事情,只需通过重新连接处理任何MySQL数据库断开连接,
  • 将它放在crontab中,每五分钟收集一次数据,没有循环,没有睡眠,或
  • 别的什么?

1 个答案:

答案 0 :(得分:6)

MySQL服务器配置为处理固定数量有限的连接。绑定一个不经常使用的连接并不是一个好习惯。因此,通常您应该在完成连接后立即关闭连接,并仅在需要时再次连接。 MySQLdb的连接是上下文管理器,因此您可以使用with-statement语法自动关闭连接。

connection = MySQLdb.connect(
    host=config.HOST, user=config.USER,
    passwd=config.PASS, db=config.MYDB, )
with connection as cursor:
    print(cursor)
    # the connection is closed for you automatically 
    # when Python leaves the `with-suite`.

为了健壮性,您可能希望使用try..except来处理(即使在第一次运行时)connect无法建立连接的情况。

话虽如此,我只是把它放在crontab条目中,免除睡觉。