0

我有一种情况,我必须在表中插入大量记录。我已经将插入的东西包装在一个成员函数中(对象的)。但这需要很多时间。为了优化这一点,我将所有这些记录作为类的数据成员保存在缓冲区(作为列表)中。当没有。记录达到 100,我正在进行批量插入。

这是代码。

class TabDailyQuotes:

    def __init__(self, metadata):
        self.metadata = metadata
        self.indexes = Table('DailyQuotes', metadata, autoload=True)
        self.ins_buf = []
        self.ins = self.indexes.insert()

    def insert(self, dict_data):
        if isinstance(dict_data, types.DictType):
            for key, val in dict_data.items():
                self.ins_buf.append(val)
        else:
            self.ins_buf.append(dict_data)
        if len (self.ins_buf) == 100:
            self.ins.execute(self.ins_buf)
            self.ins_buf = []

    def __del__(self):
        if len (self.ins_buf) > 0:
            self.ins.execute(self.ins_buf)
            self.ins_buf = []

这里的问题是,当我调用仅插入一条记录的函数(以及随后调用插入后续记录)时,我必须使用__del__()魔术函数在对象生命周期结束时插入所有剩余的记录。

谁能告诉我一个更好的方法来处理这个?

4

1 回答 1

0

不能保证 __del__ 会被调用。因此,最好明确说明清理操作并为其定义不同的方法,然后在程序关闭或 TabDailyQuotes 对象超出范围时调用它。

参考:

我不明白这个 python __del__ 行为
在 __del__ 中进行对象关闭/处置真的可以吗?

于 2013-01-22T18:06:39.947 回答