def insert(self): """ Einfuegen eines Datensatzes Die aktuellen Werte aus der Domain werden in die Datenbank geschrieben. HINT: vor dem Insert wird die Methode onInsert aufgerufen. Liefert diese False zurueck wird der Einfuegevorgang abgebrochen. @return [True|Flase] das OK Kennzeichen """ self.isOk = self.onInsert() if not self.isOk: return False values = list() tablename = self.meta['tablename'] self.lastsqlvalues = values if self.db.dbtype == self.db.DBTYPE_ORACLE: # Erzeugen Oracle spezialisertes Insert Statement from dbaccess.dboracle import DbOracle self.lastsql = DbOracle.giveInsert(tablename=tablename,fields=self.flds) elif self.db.dbtype == self.db.DBTYPE_MYSQL: from dbaccess.dbmysql import DbMySql self.createSqlParameter() self.lastsql = DbMySql.giveInsert(tablename=tablename,fields=self.flds,primarykey=self.getDbPK()) self.lastsqlvalues = tuple(self.lastsqlvalues) else: # Herstellen einer Liste von Fragezeichen # fuer prepared statement self.createSqlParameter() fragezeichen = '?,' * len(self.flds) fragezeichen = fragezeichen[:-1] self.lastsql = 'insert into %(tablename)s (%(flds)s) values(%(fragezeichen)s)' % { 'tablename':tablename, 'flds':','.join(self.flds), 'fragezeichen':fragezeichen} self.isOk = self.onWrite(mode=self.INSERT) if self.isOk: self.createSqlParameter() try: self.cursor.execute(self.lastsql,self.lastsqlvalues) except Exception,e: self.isOk = False self.errors.append("DB Fehler bei insert {0}".format(e))
def update(self,usedFields=None,fill=None): """ Veraendern des Datensatzes basieren auf den Inhalten der Domain HINT: vor dem Update wird die Methode onUpdate aufgerufen. Liefert diese False zurueck wird der Ueberschreibenvorgang abgebrochen. Der Methode kann eine Feldliste uebergeben werden. Ist diese deklariert, so werden nur die deklarierten Felder zum Update verwendet. @parma usedFields + None Alle Felder werden benutzt + list Liste von Feldern + 'auto' Attribute usedFields wird benutzt dies ist praktisch, wenn vorher fromCgi aufgerufen wurde. @return [True|Flase] das OK Kennzeichen """ self.isOk = self.onUpdate() if not self.isOk: return False self.isOk = self.onWrite(mode=self.UPDATE) if not self.isOk: return False flds = list() if usedFields is None: for fld in self.meta['fields'].keys(): flds.append(fld) else: if usedFields == 'auto': flds = self.usedFields else: flds = usedFields # Included Flds flds += self.includeflds values = list() primkey = self.getPK() # Sicherheitsabfrage: # Bei Update muss Primary Key Feld vorhanden sein. # if not primkey in flds: raise Exception('Bei update konnte der Primary Key "{0}" in Feldliste [{1}] nicht gefunden werden'.format(primkey,','.join(flds))) for fld in flds: if self.__dict__[fld] is None: values.append(None) else: values.append(self.__dict__[fld]) tablename = self.meta['tablename'] values.append(self.__dict__[primkey]) self.lastsqlvalues = values if self.db.dbtype == self.db.DBTYPE_ORACLE: # Erzeugen Oracle spezialisertes Update Statement from dbaccess.dboracle import DbOracle dbFlds = [] self.lastsqlvalues = {} for fld in flds: dbFlds.append(self.getDbFieldName(fld)) self.lastsqlvalues[self.getDbFieldName(fld)] = self.__dict__[fld] self.lastsql = DbOracle.giveUpdate( tablename=tablename, fields=dbFlds, primarykey=self.getDbPK() ) elif self.db.dbtype == self.db.DBTYPE_MYSQL: # Erzeugen Mysql spezialisertes Insert Statement from dbaccess.dbmysql import DbMySql dbFlds = [] self.lastsqlvalues = [] for fld in flds: if fld != self.getPK(): dbFlds.append(self.getDbFieldName(fld)) self.lastsqlvalues.append(self.getValue(fld)) self.lastsqlvalues.append(self.getValue(self.getPK())) self.lastsql = DbMySql.giveUpdate( tablename=tablename, fields=dbFlds, primarykey=self.getDbPK() ) else: fragezeichen = '?,' * len(flds) fragezeichen = fragezeichen[:-1] fldList = list() for fld in flds: fldList.append('%(fld)s=?' % {'fld':self.getDbFieldName(fld)}) self.lastsql = 'update %(tablename)s set %(flds)s where %(primkey)s = ?' % { 'tablename':tablename, 'flds':','.join(fldList), 'primkey':self.getDbPK() } if self.isOk: try: self.cursor.execute(self.lastsql,self.lastsqlvalues) except Exception as e: self.isOk = False self.errors.append("DB Fehler bei update {0} sql: {1}".format(e,self.lastsql)) return self.isOk
def insert(self): """ Einfuegen eines Datensatzes Die aktuellen Werte aus der Domain werden in die Datenbank geschrieben. HINT: vor dem Insert wird die Methode onInsert aufgerufen. Liefert diese False zurueck wird der Einfuegevorgang abgebrochen. @return [True|Flase] das OK Kennzeichen """ self.isOk = self.onInsert() if not self.isOk: return False self.isOk = self.onWrite(mode=self.INSERT) if not self.isOk: return False values = list() tablename = self.meta['tablename'] self.lastsqlvalues = values if self.db.dbtype == self.db.DBTYPE_ORACLE: # Erzeugen Oracle spezialisertes Insert Statement from dbaccess.dboracle import DbOracle self.createSqlParameter() self.lastsql = DbOracle.giveInsert(tablename=tablename,fields=self.flds) elif self.db.dbtype == self.db.DBTYPE_MYSQL: from dbaccess.dbmysql import DbMySql self.createSqlParameter() self.lastsql = DbMySql.giveInsert(tablename=tablename,fields=self.flds,primarykey=self.getDbPK()) self.lastsqlvalues = tuple(self.lastsqlvalues) else: # Herstellen einer Liste von Fragezeichen # fuer prepared statement self.createSqlParameter() fragezeichen = '?,' * len(self.flds) fragezeichen = fragezeichen[:-1] self.lastsql = 'insert into %(tablename)s (%(flds)s) values(%(fragezeichen)s)' % { 'tablename':tablename, 'flds':','.join(self.flds), 'fragezeichen':fragezeichen} if self.isOk: self.createSqlParameter() try: self.cursor.execute(self.lastsql,self.lastsqlvalues) except Exception as e: self.isOk = False self.errors.append("DB Fehler bei insert {0}".format(e)) if self.isOk and self.db.dbtype == self.db.DBTYPE_SQLITE: sql = 'select seq from sqlite_sequence where name="{0}"'.format(tablename) self.cursor.execute(sql) next_record = self.cursor.fetchone() # Pruefen ob last Autoincrement erreichbar # ist wenn nicht wird None gespeichert. if next_record is None: self.lastAutoincrement = None else: self.lastAutoincrement = next_record[0] elif self.isOk and self.db.dbtype == self.db.DBTYPE_MYSQL: self.cursor.execute('SELECT last_insert_id();') next_record = self.cursor.fetchone() self.lastAutoincrement = next_record[0] else: self.lastAutoincrement = None return self.isOk
def update(self,usedFields=None): """ Veraendern des Datensatzes basieren auf den Inhalten der Domain HINT: vor dem Update wird die Methode onUpdate aufgerufen. Liefert diese False zurueck wird der Ueberschreibenvorgang abgebrochen. Der Methode kann eine Feldliste uebergeben werden. Ist diese deklariert, so werden nur die deklarierten Felder zum Update verwendet. @return [True|Flase] das OK Kennzeichen """ self.isOk = self.onUpdate() if not self.isOk: return False flds = list() if usedFields != None: flds = usedFields else: for fld in self.meta['fields'].keys(): flds.append(fld) values = list() primkey = self.getPK() # Sicherheitsabfrage: # Bei Update muss Primary Key Feld vorhanden sein. # if not primkey in flds: raise Exception('Bei update konnte der Primary Key "{0}" in Feldliste [{1}] nicht gefunden werden'.format(primkey,','.join(flds))) for fld in flds: if self.__dict__[fld] == None: values.append(None) else: values.append(self.__dict__[fld]) tablename = self.meta['tablename'] values.append(self.__dict__[primkey]) self.lastsqlvalues = values if self.db.dbtype == self.db.DBTYPE_ORACLE: # Erzeugen Oracle spezialisertes Update Statement from dbaccess.dboracle import DbOracle dbFlds = [] self.lastsqlvalues = {} for fld in flds: dbFlds.append(self.getDbFieldName(fld)) self.lastsqlvalues[self.getDbFieldName(fld)] = self.__dict__[fld] self.lastsql = DbOracle.giveUpdate( tablename=tablename, fields=dbFlds, primarykey=self.getDbPK() ) elif self.db.dbtype == self.db.DBTYPE_MYSQL: # Erzeugen Oracle spezialisertes Insert Statement from dbaccess.dbmysql import DbMySql dbFlds = [] self.lastsqlvalues = [] for fld in flds: if fld != self.getPK(): dbFlds.append(self.getDbFieldName(fld)) self.lastsqlvalues.append(self.getValue(fld)) self.lastsqlvalues.append(self.getValue(self.getPK())) self.lastsql = DbMySql.giveUpdate( tablename=tablename, fields=dbFlds, primarykey=self.getDbPK() ) else: fragezeichen = '?,' * len(flds) fragezeichen = fragezeichen[:-1] fldList = list() for fld in flds: fldList.append('%(fld)s=?' % {'fld':self.getDbFieldName(fld)}) self.lastsql = 'update %(tablename)s set %(flds)s where %(primkey)s = ?' % { 'tablename':tablename, 'flds':','.join(fldList), 'primkey':self.getDbPK() } self.isOk = self.onWrite(mode=self.UPDATE) if self.isOk: try: self.cursor.execute(self.lastsql,self.lastsqlvalues) except Exception,e: self.isOk = False self.errors.append("DB Fehler bei update {0} sql: {1}".format(e,self.lastsql))