From e97d0a3ca1e3b4c5d8c386fd7939e9b23d7bbbd4 Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Fri, 24 Jul 2015 00:50:07 +0300 Subject: [PATCH] Update data Reload dump without trashing existing data in the table. --- reload_db.py | 18 ++++++++++++------ xsetbg_db.py | 23 ++--------------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/reload_db.py b/reload_db.py index 41a3c94..93eeac9 100755 --- a/reload_db.py +++ b/reload_db.py @@ -10,7 +10,7 @@ __copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design" __license__ = "GNU GPL" import sys -from sqlobject import sqlhub +from sqlobject import sqlhub, SQLObjectNotFound from sqlobject.sqlbuilder import Insert from xsetbg_conf import xsetbg_conf from xsetbg_db import recreate_db @@ -41,11 +41,17 @@ for line in dump_file: timestamp = convert_str(timestamp) if fs_encoding != 'utf-8': filename = filename.decode(fs_encoding).encode('utf-8') - values = {'last_shown': timestamp, 'full_name': filename} - if id: - values['id'] = id - query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values)) - txn.query(query) + try: + row = xsetbg_db.byFull_name(filename) + except SQLObjectNotFound: + values = {'last_shown': timestamp, 'full_name': filename} + if id: + values['id'] = id + query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values)) + txn.query(query) + else: + assert row.id == id + assert row.last_shown == timestamp txn.commit() sqlhub.processConnection = connection diff --git a/xsetbg_db.py b/xsetbg_db.py index 54d174b..e5fe5d0 100755 --- a/xsetbg_db.py +++ b/xsetbg_db.py @@ -11,18 +11,10 @@ __all__ = ['xsetbg_db_path', 'xsetbg_db'] import os from sqlobject import SQLObject, connectionForURI, sqlhub, \ - StringCol, UnicodeCol, IntCol, BoolCol, DatabaseIndex, dberrors, \ - SQLObjectNotFound + UnicodeCol, IntCol, BoolCol, DatabaseIndex, dberrors from xsetbg_conf import xsetbg_conf -class SqliteSequence(SQLObject): - class sqlmeta: - idName = 'rowid' - name = StringCol(unique=True) - seq = IntCol() - - class XSetBg(SQLObject): full_name = UnicodeCol(alternateID=True) last_shown = IntCol(default=None) # timestamp @@ -31,21 +23,10 @@ class XSetBg(SQLObject): last_shown_idx = DatabaseIndex('last_shown') flag_idx = DatabaseIndex('flag') - def clearTable(self): - super.clearTable(XSetBg, self) - try: - seq = SqliteSequence.byName(XSetBg.sqlmeta.table) - except SQLObjectNotFound: - SqliteSequence(name=XSetBg.sqlmeta.table, seq=0) - else: - seq.seq = 0 # Reset autoincrement counter - def recreate_db(): global xsetbg_db - if xsetbg_db: - xsetbg_db.clearTable() - else: + if not xsetbg_db: xsetbg_db = XSetBg xsetbg_db.createTable() return xsetbg_db -- 2.39.2