我正在python中编写一个脚本,它基本上查询WMI并更新mysql数据库中的信息。其中一个“写你需要的东西”来学习编程练习。
例如,如果脚本中间出现问题,远程计算机将关闭,它将被分离为函数。
查询一些WMI数据
将其更新到数据库
查询其他WMI数据
将其更新到数据库
最好在开始时打开一个mysql连接并在每次更新后保持打开或关闭连接?
似乎一个连接会使用更少的资源。 (虽然我只是在学习,所以这是一个完整的猜测。)然而,打开和关闭每个更新的连接似乎更“整洁”。函数将更加独立,而不是依赖于函数之外的代码。
答案 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答案中的有用线索。我认为你应该首先找出你的实际要求和代码。
提一个不同的策略;一些应用程序保留一个数据库(或其他)连接池,如果是事务,只需从该池中提取一个。看起来很明显你只需要一个这种应用程序的连接。但您仍然可以保留一个连接池并应用以下内容;
这有点介于单一连接和每个事务策略的连接之间。