def dbf2sqlite(): db = DAL('sqlite://upload.sqlite', pool_size=1, check_reserved=['sqlite'], folder=DATA_SQLITE) db = get_model(db) for table in db.tables: print ' table', table, for row_upper_names in DBF(os.path.join(DATA_FOX, '%s.dbf' % table)): something = False row_lower_names = {} # table definitions in applications/viewer/modules/db_model.py and in fox/src/myconversion/myconversion.prg must be the same for k, v in row_upper_names.iteritems(): k = k.lower() if v is not None: # k != 'id': something = True row_lower_names[k.lower()] = v # but fox thurn fields to uppercase and we preffer lowercase if something: db[table].insert(**row_lower_names) db.commit() print ' - done' try: # are some import-post-actions defined? from myconversion import myconversion # ./myconversion.py : def myconversion(db): print ' additional data conversion', myconversion(db) # see www.web2py.com/book, chapter 6 - DAL db.commit() # auto commit if you miss commit in myconversion() print ' - done' except ImportError: pass db.close()
class DBDataMixinBase(object): def __init__(self, dbconn): self.db = DAL(**dbconn) self.dalobjs = {} def loadAllTables(self, objdefs): for vs in objdefs: self.dalobjs[vs[0]] = DalObj(self.db, vs[0], vs[1:]) def loadSomeTables(self, objdefs, tablelist): for vs in objdefs: if vs[0] in tablelist: self.dalobjs[vs[0]] = DalObj(self.db, vs[0], vs[1:]) def makeIndex(self, indexDef): for k, v in indexDef.iteritems(): self.dalobjs[k].makeIndex(indexDef[k]) def removeIndex(self, indexDef): for k, v in indexDef.iteritems(): self.dalobjs[k].removeIndex(indexDef[k]) def truncateTables(self, tablelist): for tn in tablelist: self.dalobjs[tn].truncate() def closeDB(self): self.db.close()