def diff_felder(self, tabelle): alte = [f[0] for f in getDBHandle().listfields(tabelle + '_old')] neue = [f[0] for f in getDBHandle().listfields(tabelle)] return ( [f for f in alte if f in neue], [f for f in alte if f not in neue], [f for f in neue if f not in alte], )
def __init__(self): # Protokoll stoert from ebkus.app.protocol import temp_off temp_off() # Sollversion ist immer die Major-Version der Software (4.1, 4.4, ...) from ebkus import Version self.ist_sw = Version # Minor-Version spielt keine Rolle vt = Version.split('.') self.soll_db = "%s.%s" % (vt[0], vt[1]) try: opendb() except: # Zum Update muss die Datenbank verfügbar sein. # Daher: self.abort("Fuer das Update muss die Datenbank verfuegbar sein!", exc_info=True) # Ist-Version der Datenbank feststellen self.tables = getDBHandle().listtables() try: ist_db = self.get_version() vt = ist_db.split('.') self.ist_db = "%s.%s" % (vt[0], vt[1]) except: self.ist_db = None
def needs_update(): db = getDBHandle() felder = db.listfields('jghstat07') for f in felder: if f[0] == 'jahr': return False return True
def ist_version_3_3(): tables = getDBHandle().listtables() if ('jghstat07' in tables and not 'strkatalog' in tables and 'fachstatlei' in tables): return True return False
def create_schema_in_db(newtables, test = 0): db = getDBHandle() #print db for t in newtables: if not test: # protokollieren abgestellt, da es um die Einrichtung # der Datenbank selber geht db.query(t.sql_create()) else: print t.sql_create()
def needs_update(ziel_version): name = 'update_auf_%s_war_erfolgreich' % ziel_version filename = join(config.EBKUS_HOME, name) #if exists( db = getDBHandle() if 'jghstat07' in db.listtables(): felder = db.listfields('jghstat07') for f in felder: if f[0] == 'jahr': return False return True
def set_diff(self): tables = getDBHandle().listtables() self.tables_old = [t[:-4] for t in tables if t.endswith('_old')] self.tables_new = [t for t in tables if not t.endswith('_old')] self.tables_both = [t for t in self.tables_new if t in self.tables_old] ## print self.tables_old ## print self.tables_new ## print self.tables_both #print 'obsolete Tabellen: ', [t for t in self.tables_old if t not in self.tables_new] #print 'neue Tabellen: ', [t for t in self.tables_new if t not in self.tables_old] #print 'gemeins. Tabellen: ', self.tables_both for t in self.tables_both: common, obsolet, neu = self.diff_felder(t)
def create_new_table(): tables = get_schema_info(schemainfo) jghstat07 = [t for t in tables if t.tablename == 'jghstat07'][0] db = getDBHandle() #print jghstat07.sql_create() db.query(jghstat07.sql_create()) #table_id = 32 #field_id = 333 table_id = Tabelle().getNewId() #print jghstat07.sql_insert(table_id) db.query(jghstat07.sql_insert(table_id)) for f in jghstat07.fields: field_id = Feld().getNewId() #print f.sql_insert(field_id) db.query(f.sql_insert(field_id)) j07 = Tabelle(tabelle='jghstat07') logging.info("Neue Tabelle für %s: %s" % (j07['name'], 'jghstat07')) if config.BERLINER_VERSION: merkmale = 'merkmale_berlin.py' else: merkmale = 'merkmale_standard.py' create_new_kategorien(jghstat07, join(config.EBKUS_HOME, 'sql', merkmale)) for f in jghstat07.fields: fupd = Feld() v = Code(code=f.verwtyp, kat_code='verwtyp') fupd['verwtyp'] = v['id'] if f.verwtyp in 'kb': kat = Kategorie(code=f.kat_code) fupd['kat_id'] = kat['id'] fupd['kat_code'] = kat['code'] if f.verwtyp in 'fk': # kodierte Felder sind Fremdschlüssel nach code fupd['ftab_id'] = Tabelle(tabelle=f.ftable)['id'] if f.verwtyp in 'f': # Name für inverse Beziehung fupd['inverse'] = f.inverse feld = Feld(feld=f.fieldname, tab_id=j07['id']) feld.update(fupd) ## site = Code(kat_code='dbsite', code=config.SITE) ## t = TabellenID() ## t['table_id'] = j07['id'] ## t['table_name'] = j07['tabelle'] ## t['dbsite'] = site['id'] ## t['minid'] = site['mini'] ## t['maxid'] = site['maxi'] ## t['maxist'] = 1 ## t.insert() return True
def delete_tables_in_db(test = 0): """Löscht alle Tabellen.""" db = getDBHandle() #print db alltables = db.listtables() #print alltables for t in alltables: #print 'Lösche ', t if not test: # protokollieren abgestellt, da es um die Einrichtung # der Datenbank selber geht db.query("DROP TABLE %s" % t) else: print "DROP TABLE %s" % t pass
def create_new_table(): tables = get_schema_info(schemainfo) jghstat07 = [t for t in tables if t.tablename == "jghstat07"][0] db = getDBHandle() # print jghstat07.sql_create() db.query(jghstat07.sql_create()) # table_id = 32 # field_id = 333 table_id = Tabelle().getNewId() # print jghstat07.sql_insert(table_id) db.query(jghstat07.sql_insert(table_id)) for f in jghstat07.fields: field_id = Feld().getNewId() # print f.sql_insert(field_id) db.query(f.sql_insert(field_id)) j07 = Tabelle(tabelle="jghstat07") logging.info("Neue Tabelle für %s: %s" % (j07["name"], "jghstat07")) if config.BERLINER_VERSION: merkmale = "merkmale_berlin.py" else: merkmale = "merkmale_standard.py" create_new_kategorien(jghstat07, join(config.EBKUS_HOME, "sql", merkmale)) for f in jghstat07.fields: fupd = Feld() v = Code(code=f.verwtyp, kat_code="verwtyp") fupd["verwtyp"] = v["id"] if f.verwtyp in "kb": kat = Kategorie(code=f.kat_code) fupd["kat_id"] = kat["id"] fupd["kat_code"] = kat["code"] if f.verwtyp in "fk": # kodierte Felder sind Fremdschlüssel nach code fupd["ftab_id"] = Tabelle(tabelle=f.ftable)["id"] if f.verwtyp in "f": # Name für inverse Beziehung fupd["inverse"] = f.inverse feld = Feld(feld=f.fieldname, tab_id=j07["id"]) feld.update(fupd) site = Code(kat_code="dbsite", code=config.SITE) t = TabellenID() t["table_id"] = j07["id"] t["table_name"] = j07["tabelle"] t["dbsite"] = site["id"] t["minid"] = site["mini"] t["maxid"] = site["maxi"] t["maxist"] = 1 t.insert() return True
def getFields(table): fs = getDBHandle().listfields(table) dbfields = [] dbfields_prefix = [] for f in fs: # print f if f[0] == 'idx1': continue ## Nicht kompatibel fuer MySQLdb [('feld', 'int(11)',),(..)] und ## MySQL [['feld','tabelle', 'int', 11, ],[..]] ## ## if f[2] in ['int', 'char', 'long', 'string', 'blob', 'mediumblob', 'longblob','varchar']: dbfields.append(f[0]) dbfields_prefix.append("%s.%s" % (table, f[0])) # else: # raise "Unknown database datatype: %s" % f[2] return dbfields, dbfields_prefix
def __init__(self): # Protokoll stoert from ebkus.app.protocol import temp_off temp_off() # Sollversion ist immer die Version der Software from ebkus import Version self.soll = Version try: opendb() except: # Zum Update muss die Datenbank verfügbar sein. # Daher: self.abort("Für das Update muss die Datenbank verfügbar sein!", exc_info=True) # Ist-Version feststellen self.tables = getDBHandle().listtables() self.ist = self.get_version()
def insert_tables_fields_in_db(newtables, test = 0): db = getDBHandle() tid = 1 fid = 1 for t in newtables: sql = t.sql_insert(tid) if not test: # protokollieren abgestellt, da es um die Einrichtung # der Datenbank selber geht db.query(sql) else: print sql tid = tid + 1 for f in t.fields: sql = f.sql_insert(fid) if not test: # protokollieren abgestellt, da es um die Einrichtung # der Datenbank selber geht db.query(sql) else: print sql fid = fid + 1
def alte_tabellen_loeschen(self): for t in getDBHandle().listtables(): if t.endswith('_old'): SQL("DROP TABLE %s" % t).execute() logging.info("Alte Tabellen geloescht")
def getNewTablesPairs(): """Aus der Datenbank generiert.""" res = getDBHandle().query("SELECT tabelle, klasse FROM tabelle") # print res return res
def needs_update(): db = getDBHandle() if 'jghstat07' in db.listtables(): return False else: return True
def has_field(self, table, field): return bool([t for t in getDBHandle().listfields(table) if t[0] == field])