5

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

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

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

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

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

我问的原因:时不时地,我必须重新启动脚本,因为我的 MySQL 服务器可能已脱机或其他问题。我是不是该:

  • 继续做我正在做的事情,并通过重新连接来处理任何 MySQL 数据库断开连接,
  • 放在crontab里每五分钟收集一次数据,没有循环,没有睡眠,或者
  • 还有什么?
4

1 回答 1

7

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 条目中而不用睡觉。

于 2013-10-06T13:08:53.273 回答