Exemplo n.º 1
0
 def save(self):
   dbh = dbstuff.getRW(self.dbh_key)
   try:
     c = dbh.cursor()
     cols,vals = [],[]
     for k,v in self.sqlfields.items():
       if v > 1 or k==self.idfield:
         try:
           vals.append(self.__getattribute__("_sql_"+k))
           cols.append('`' + k + '`')
         except AttributeError:
           # just skip missing attrs
           pass
     if not self.selected:
       query = "INSERT INTO " + self.table + " (" + ','.join(cols) + ") VALUES (" + ','.join(['%s' for v in vals]) + ")"
       if (DEBUG):
         print query
       c.execute(query, tuple(vals))
       dbh.commit()
       if not self.id:
         self.__setattr__(self.SQLId, c.lastrowid)
       self.selected = True
     else:
       if cols:
         query = "UPDATE " + self.table + " SET " + ','.join(["%s=%%s" % k for k in cols]) + " WHERE " + self.idfield + "=%s"
         if (DEBUG):
           print query
         c.execute(query, tuple(vals + [self.id]))
         dbh.commit()
     c.close()
   finally:
     dbstuff.release(dbh, self.dbh_key)
Exemplo n.º 2
0
  def __init__(self, id=0, dbh=None, fields=[], dbh_key = "default"):
    object.__setattr__(self, "sqlfields", {})
    self.idfield = self.SQLId
    self.table = self.SQLTable
    self.sqlfields = schemas.get(self.table,{})
    self.dbh_key = dbh_key
    
    self.selected = False

    release = False
    if dbh is None:
      dbh = dbstuff.getRW(self.dbh_key)
      release = True

    try:
      if self.sqlfields=={}:
        query = "DESCRIBE " + self.table
        c = dbh.cursor()
        c.execute(query)
        for column,coltype,null,key,default,extra in c:
          self.sqlfields[column] = 1
          self.__setattr__("_sql_" + column, default)
        schemas[self.table] = self.sqlfields
  
      self.id = id
      if self.id:
        query = "SELECT "
        if len(fields)>0:
          query += ",".join(fields) + " "
        else:
          query += "* "
        query += "FROM " + self.table + " WHERE " + self.idfield + "=%s"
        
        if (DEBUG):
          print query
        
        c = dbh.cursor(MySQLdb.cursors.DictCursor)
        c.execute( query, id )
        self.selected = True
        # else object not found
        if c.rowcount>0:
          d = c.fetchone()
          for k,v in d.items():
            self.__setattr__("_sql_" + k, v)
          self.sqlfields[self.idfield] = 1
        else:
          raise ObjectNotFound( self.table + " " + str(id) )
      else:
        for k in self.sqlfields:
          self.sqlfields[k] = 2
    finally:
      if release:
        dbstuff.release(dbh, self.dbh_key)
Exemplo n.º 3
0
  def delete(self):
    """Remove the database representation of this object.

    You shouldn't attempt to mess with this object after calling delete();
    probably something bad will happen.
    """
    query = "DELETE FROM " + self.table + " WHERE " + self.idfield + "=%s"
    dbh = dbstuff.getRW(self.dbh_key)
    try:
      c = dbh.cursor()
      c.execute(query, self.id)
      c.close()
      dbh.commit()
    finally:
      dbstuff.release(dbh,self.dbh_key)
Exemplo n.º 4
0
def SQLNewFactory(cls, data, dbh=None, dbh_key = "default"):
  """Create a new instance of a class."""
  release = False
  if dbh is None:
    release = True
    dbh = dbstuff.getRW(dbh_key)
  try:
    columns = []
    values = []
    for k,v in data.items():
      columns.append('`' + k + '`')
      values.append(v)
    query = "INSERT INTO " + cls.SQLTable + " (" + ",".join(columns) + ") VALUES (" + ",".join(["%s" for v in values]) + ")"
    c = dbh.cursor()
    if (DEBUG):
      print query
    c.execute( query, tuple(values) )
    id = c.lastrowid
    c.close()
    dbh.commit()
  finally:
    if release:
      dbstuff.release(dbh,dbh_key)
  return cls(id, dbh)