目前我正在开发一个抽象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()方法,该方法应该删除此类可能创建的对象。此方法应从内存中删除所有这些对象并提供干净的关闭。这也可以避免内存泄漏。 我无法弄清楚应该从内存中删除所有对象。有人可以建议我在这里调用什么方法吗?
有什么方法可以衡量不同方法及其变体的性能?
我正在浏览documentation here并意识到我不应该在每个方法中进行会话,而应该创建单个会话实例并在整个过程中使用。请提供您的反馈意见。让我知道在这里做事的最佳方式是什么。
这里将非常感谢任何形式的帮助。
答案 0 :(得分:3)
要在Python中从内存中删除对象,您只需要停止引用它们。通常不需要显式编写或调用任何方法来销毁或清理对象。因此,MyDBClass
的实例将在超出范围时自动清除。
如果您正在谈论关闭SQLAlchemy会话,那么您只需要在其上调用close()方法。
SQLAlchemy会话专为多个事务而设计。您通常不需要多次创建和销毁它。在__init__
函数中创建一个会话,然后在QueryFunction
,updateFunction
等中使用该会话。