0

目前我正在开发一个抽象 SQLAlchemy 的类。此类将充当帮助工具来验证数据库中的值。此类将用于回归/负载测试。测试用例将进行数十万次数据库查询。我的班级布局如下。

class MyDBClass:
    def __init__(self, dbName)
         self.dbName = dbName
         self.dbEngines[dbName] = create_engine()
         self.dbMetaData[dbName] = MetaData()
         self.dbMetaData[dbName].reflect(bind=self.dbEngines[dbName])
         self.dbSession[dbName] = sessionmaker(bind=self.dbEngines[dbName])

    def QueryFunction(self,dbName, tablename, some arguments):
          session = self.dbSession[dbName]()
          query = session.query(requiredTable)
          result = query.filter().all()
          session.close()
    def updateFunction(self, dbName, talbeName, some arguments):
          session = self.dbSession[dbName]()
          session.query(requiredTable).filter().update()
          session.commit()
          session.close()
    def insertFunction(self, dbName, tableName, some arguments):
          connection = self.dbEngines[dbName].connect()
          requiredTable = self.dbMetaData[dbName].tables[tableName]
          connection.execute(requiredTable.insert(values=columnValuePair))
          connection.close()
    def cleanClose(self):
          # Code which will remove the connection/session/object from memory.
          # do some graceful work to clean close.

我想编写 cleanClose() 方法,该方法应该删除可能由此类创建的对象。此方法应从内存中删除所有这些对象并提供干净的关闭。这也可以避免内存泄漏。我无法弄清楚应该从内存中删除哪些所有对象。有人可以建议我在这里需要做什么方法调用吗?

编辑1:

有什么方法可以衡量不同方法及其变体的性能吗?
我在这里浏览了文档,并意识到我不应该在每种方法中都创建会话,而应该创建单个会话实例并在整个过程中使用。请提供您对此的反馈。让我知道在这里做事的最佳方式是什么。

任何形式的帮助将不胜感激。

4

1 回答 1

3

要在 Python 中从内存中删除对象,您只需要停止引用它们即可。通常不需要显式编写或调用任何方法来销毁或清理对象。因此,当一个实例MyDBClass超出范围时将自动清理它。

如果您正在谈论关闭 SQLAlchemy 会话,那么您只需要在其上调用 close() 方法。

SQLAlchemy 会话是为多个事务设计的。您通常不需要多次创建和销毁它。在函数中创建一个会话,__init__然后在 、 等中使用QueryFunctionupdateFunction

于 2012-06-28T18:11:17.293 回答