def update_feld(): #print 'Feld tabelle ergänzen' tables = schemagen.get_schema_info(schemadata.schemainfo) verwtlist = CodeList(where = "kat_code = 'verwtyp'") katlist = KategorieList(where = '') dbtlist = TabelleList(where = '') for t in tables: dbt = dbtlist.findu("tabelle", t.tablename) assert dbt['tabelle'] == t.tablename #print "Tabelle '%s'" % t.tablename dbfields = FeldList(where = "tab_id = %s" % dbt['id']) for f in t.fields: dbf = dbfields.findu('feld', f.fieldname) assert dbf['feld'] == f.fieldname verwtyp = verwtlist.findu('code', f.verwtyp) dbfupd = Feld() dbfupd['verwtyp'] = verwtyp['id'] #print " Feld '%s' (%s %s)" % (f.fieldname, f.verwtyp, f.ref) if f.verwtyp in 'kmb': kat = katlist.findu('code', f.kat_code) dbfupd['kat_id'] = kat['id'] dbfupd['kat_code'] = kat['code'] if f.verwtyp in 'fkm': # kodierte Felder sind Fremdschlüssel nach code dbfupd['ftab_id'] = dbtlist.findu('tabelle', f.ftable)['id'] if f.verwtyp in 'f': # Name für inverse Beziehung dbfupd['inverse'] = f.inverse dbf.update(dbfupd)
def generate_ebapi(filename): from ebkus.gen.schemagen import get_schema_info from ebkus.gen.schemadata import schemainfo file = open(filename, "wb") # print tables file.write(header) schemadata_tables = get_schema_info(schemainfo) for t in schemadata_tables: table, lname = t.tablename, t.classname dbfieldsl = [f.fieldname for f in t.fields] dbfields = formatFields(repr(dbfieldsl), MAXL, IND) primarykey = repr(t.primarykey) keys = t.keys file.write( template % {"dbfields": dbfields, "lname": lname, "table": table, "keys": keys, "primarykey": primarykey} ) logging.info("Klassendefinition generiert: %s" % lname) fkeys, ifkeys, mkeys = generateForeignKeyInfo(schemadata_tables) file.write( """ # Die folgenden Einträge ermöglichen die automatische Navigation über # Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet. # fall['akte_id__vn'] kann damit automatisch evaluiert werden. """ ) for f in fkeys: file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f) file.write( """ # Die folgenden Einträge ermöglichen die automatische Navigation über # inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ # verwendet. # fall['leistungen'] kann damit automatisch evaluiert werden. """ ) for f in ifkeys: file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f) file.write( """ # Die folgenden Einträge ermöglichen Mehrfachauswahlfelder. # In das Feld werden die IDs von Code-Instanzen als Strings # geschrieben. Beim Aufruf über __getitem__ werden die durch # Code-Instanzen ersetzt. """ ) for f in mkeys: file.write("%s.multikatfieldtypes['%s'] = %sList\n" % f) file.close()
def init_new_db(self): from ebkus.gen.schemadata import schemainfo from ebkus.gen.schemagen import get_schema_info, create_schema_in_db, \ insert_tables_fields_in_db, insert_version newtables = get_schema_info(schemainfo) test = False create_schema_in_db(newtables, test) insert_tables_fields_in_db(newtables, test) insert_version() logging.info('Neue Datenbank erzeugt')
def gen_api(schema_str): import StringIO file = StringIO.StringIO() newtables = getNewTablesPairs() tables = newtables # print tables file.write(header) # hier geht es durcheinander, weil noch nicht einheitlich von schemadata # generiert wird. schemadata_tables = schemagen.get_schema_info(schema_str) tabledict = schemadata_tables[0].Tables for elem in tables: table, lname = elem dbfieldsl, dbfields_prefixl = getFields(table) dbfields = formatFields(repr(dbfieldsl), MAXL, IND) dbfields_prefix = formatFields(repr(dbfields_prefixl), MAXL, IND) if tabledict.has_key(table): primarykey = repr(tabledict[table].primarykey) keys = tabledict[table].keys else: # alte Tabelle, Heuristik primarykey = 'None' keys = [] ## if 'id' in dbfieldsl: ## primarykey = "'id'" ## else: ## primarykey = 'None' file.write(template % { 'dbfields' : dbfields, 'dbfields_prefix' : dbfields_prefix, 'lname' : lname, 'table' : table, 'keys' : keys, 'primarykey' : primarykey}) print 'Klassendefinition generiert: %s' % lname fkeys, ifkeys = generateForeignKeyInfo(schemadata_tables) file.write( """ # Die folgenden Einträge ermöglichen die automatische Navigation über # Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet. # fall['akte_id__vn'] kann damit automatisch evaluiert werden. """) for f in fkeys: file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f) file.write( """ # Die folgenden Einträge ermöglichen die automatische Navigation über # inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ # verwendet. # fall['leistungen'] kann damit automatisch evaluiert werden. """) for f in ifkeys: file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f) return file
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 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 generate_ebapi(filename): from ebkus.gen.schemagen import get_schema_info from ebkus.gen.schemadata import schemainfo file = open(filename, 'wb') # print tables file.write(header) schemadata_tables = get_schema_info(schemainfo) for t in schemadata_tables: table, lname = t.tablename, t.classname dbfieldsl = [f.fieldname for f in t.fields] dbfields = formatFields(repr(dbfieldsl), MAXL, IND) primarykey = repr(t.primarykey) keys = t.keys file.write(template % { 'dbfields' : dbfields, 'lname' : lname, 'table' : table, 'keys' : keys, 'primarykey' : primarykey}) logging.info('Klassendefinition generiert: %s' % lname) fkeys, ifkeys = generateForeignKeyInfo(schemadata_tables) file.write(""" # Die folgenden Einträge ermöglichen die automatische Navigation über # Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ verwendet. # fall['akte_id__vn'] kann damit automatisch evaluiert werden. """) for f in fkeys: file.write("%s.foreignfieldtypes['%s'] = (%s, %s)\n" % f) file.write(""" # Die folgenden Einträge ermöglichen die automatische Navigation über # inverse Fremdschlüssel. Wird insbesondere von DBObjekt.__getitem__ # verwendet. # fall['leistungen'] kann damit automatisch evaluiert werden. """) for f in ifkeys: file.write("%s.inversefieldtypes['%s'] = (%sList, '%s')\n" % f) file.close()