[英]Python sqlite: using executemany() with unspecified number of parameters
[英]Using a progress handler in Python SQLite executemany query
我有一個帶有長時間運行的SQLite查詢的Python應用程序,我想在PyQT表單上顯示進度。
我的代碼的精簡版:
def run_long_query(self,)
self.con = lite.connect(self.dbfname)
self.con.set_progress_handler(self.progress_handler, 1)
cur = self.con.cursor()
vals = list(self.hash_iter(dirname, pattern))
query = "INSERT OR REPLACE INTO hashval2fname (hashvalue, fname) VALUES(?, ?)"
cur.executemany(query, vals)
self.con.commit()
self.con.close()
def progress_handler(self):
print self.counter
self.counter += 1
self.pbar.setValue((self.pbar.value() + self.prog_step / 2))
time.sleep(0.1)
return 0 # returning non-zero aborts
一切都很好,但我得到了相當多的進度更新。 例如,假設vals返回一個長度為10的列表。我將進度條的上限設置為10,我希望查詢運行10次,並且我的progress_handler函數被調用10次,在此期間它會更新我的進度條一個步驟。
取而代之的是,我看到的是對進度處理程序的調用次數(set_progress_handler調用中為1)比每次查詢執行多1。 例如,在我的val列表中包含一項的情況下,根據我的特定查詢,我看到在13-23之間有一定數量的對progress_handler的調用。 我通常不會在乎,但是我不知道如何有意義地使進度條跟蹤,而又不知道預期有多少次迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.