Beispiel #1
0
 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],
         )
Beispiel #2
0
 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
Beispiel #3
0
def needs_update():
    db = getDBHandle()
    felder = db.listfields('jghstat07')
    for f in felder:
        if f[0] == 'jahr':
            return False
    return True
Beispiel #4
0
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()
Beispiel #6
0
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
Beispiel #7
0
    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)
Beispiel #8
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
 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()
Beispiel #13
0
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
Beispiel #14
0
 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")
Beispiel #15
0
def getNewTablesPairs():
    """Aus der Datenbank generiert."""
    res = getDBHandle().query("SELECT tabelle, klasse FROM tabelle")
    # print res
    return res
Beispiel #16
0
def needs_update():
    db = getDBHandle()
    if 'jghstat07' in db.listtables():
        return False
    else:
        return True
Beispiel #17
0
 def has_field(self, table, field):
     return bool([t for t in getDBHandle().listfields(table) if t[0] == field])