def _update(self): if not self._changed:return 'Uses SQL UPDATE to update record' query = 'UPDATE %s SET ' % self.Meta.table_safe query += ','.join(['%s=%%s' % escape(f) for f in self._changed]) query += ' WHERE %s=%%s ' % (escape(self.Meta.pk)) values = [getattr(self, f) for f in self._changed] values.append(self._get_pk()) cursor = Query.raw_sql(query, values, self.db)
def _new_save(self): 'Uses SQL INSERT to create new record' # if pk field is set, we want to insert it too # if pk field is None, we want to auto-create it from lastrowid pk = self._get_pk() auto_pk = 1 and (pk is None) or 0 fields = [ f for f in self._fields if f != self.Meta.pk or not auto_pk ] used_fields = [] values = [] for i in fields: v = getattr(self, i, None) #print i,v if v is not None: used_fields.append(escape(i)) values.append(v) query = 'INSERT INTO %s (%s) VALUES (%s)' % (self.Meta.table_safe, ', '.join(used_fields), ', '.join(['%s'] * len(used_fields)) ) cursor = Query.raw_sql(query, values, self.db) if pk is None: self._set_pk(cursor.lastrowid) return True
def update(self, **kwds): set_what = ','.join( '%s=%%s'%( escape(k) ) for k in kwds.keys() ) query = 'UPDATE %s SET %s WHERE `%s` = %%s' % ( self.Meta.table_safe, set_what, self.Meta.pk ) values = kwds.values()+[getattr(self, self.Meta.pk)] Query.raw_sql(query, values, self.db)
def __new__(cls, name, bases, attrs): #print "init",name if name == 'Model' : return super(ModelBase, cls).__new__(cls, name, bases, attrs) new_class = type.__new__(cls, name, bases, attrs) if not getattr(new_class, 'Meta', None): class Empty: pass new_class.Meta = Empty if not getattr(new_class.Meta, 'table', None): new_class.Meta.table = lower_name(name) new_class.Meta.table_safe = escape(new_class.Meta.table) # Assume id is the default #if not getattr(new_class.Meta, 'pk', None): new_class.Meta.pk = 'id' # if not getattr(new_class.Meta, 'mc_key', None): # mc_ver = getattr(new_class.Meta, "mc_ver", "") # if mc_ver: # new_class.Meta.mc_key = "%s@%s:%%s"%(name, mc_ver) # else: new_class.Meta.mc_key = '%%s$%s'%name db = new_class.db = db_by_table(new_class.Meta.table) q = db.cursor() q.execute('SELECT * FROM %s LIMIT 0' % new_class.Meta.table_safe) q.connection.commit() new_class._fields = [f[0] for f in q.description] cache.add(new_class) return new_class