Mysql连接,一个还是多个?

时间:2008-12-22 22:40:09

标签: python mysql

我正在python中编写一个脚本,它基本上查询WMI并更新mysql数据库中的信息。其中一个“写你需要的东西”来学习编程练习。

例如,如果脚本中间出现问题,远程计算机将关闭,它将被分离为函数。

查询一些WMI数据
将其更新到数据库
查询其他WMI数据
将其更新到数据库

最好在开始时打开一个mysql连接并在每次更新后保持打开或关闭连接?

似乎一个连接会使用更少的资源。 (虽然我只是在学习,所以这是一个完整的猜测。)然而,打开和关闭每个更新的连接似乎更“整洁”。函数将更加独立,而不是依赖于函数之外的代码。

4 个答案:

答案 0 :(得分:6)

“然而,打开和关闭每次更新的连接似乎更”整洁“。”

这也是一笔巨大的开销 - 而且没有实际的好处。

创建和处理连接相对昂贵。更重要的是,究竟是什么原因?它如何改进,简化,澄清?

通常,大多数应用程序都有一个连接,从它们开始到停止时使用它们。

答案 1 :(得分:2)

我认为没有“更好”的解决方案。考虑资源还为时过早。由于wmi非常慢(与sql连接相比),db不是问题。

让它发挥作用。然后让它变得更好。

在这里使用开放连接的好处是,“自然”解决方案是使用对象而不仅仅是函数。所以这将是一次学习经历(如果你正在学习python而不是mysql)。

答案 2 :(得分:1)

请考虑以下情况:

for dataItem in dataSet:
    update(dataItem)

如果您在更新功能内打开和关闭连接,并且 dataSet 包含一千个项目,那么您将破坏应用程序的性能并破坏任何事务功能

更好的方法是打开连接并将其传递给 update 功能。您甚至可以让更新函数调用各种连接管理器。如果您打算定期执行单个更新,请围绕更新函数调用打开和关闭连接。

通过这种方式,您将能够使用函数来封装数据操作,并能够共享它们之间的连接。

但是,这种方法不适合执行批量插入或更新。

答案 3 :(得分:0)

S.Lott和Igal Serban答案中的有用线索。我认为你应该首先找出你的实际要求和代码。

提一个不同的策略;一些应用程序保留一个数据库(或其他)连接池,如果是事务,只需从该池中提取一个。看起来很明显你只需要一个这种应用程序的连接。但您仍然可以保留一个连接池并应用以下内容;

  • 每当需要数据库事务时,都会从池中提取连接并在最后返回。
  • (可选)连接在一段时间后过期(并由新的连接替换)。
  • (可选)连接在一定用量后过期。
  • (可选)如果连接处于活动状态,池可以检查(通过发送廉价查询),然后将其交给程序。

这有点介于单一连接每个事务策略的连接之间。