def delete(self): if self._orm_new_row: return if self.pk in self._orm_obj_cache: del self._orm_obj_cache[self.pk] q = Delete(Sql(self._orm_table), self._orm_where_pk()) connection.cursor().execute(q.sql(), q.args()) self._orm_new_row = True self._orm_dirty_attrs.update(self._orm_columns) self._orm_dirty_attrs.remove(self._orm_pk_attr) delattr(self, self._orm_pk_attr)
def _orm_load_column(self, column): if self._orm_new_row: return None q = Select(column, Sql(self._orm_table), self._orm_where_pk()) value = connection.cursor().execute(q.sql(), q.args()).fetchone()[0] if column.converter is not None: value = column.converter(value) attr = self._orm_attrs[column.name] self._orm_setattr(attr, value) self._orm_dirty_attrs.discard(attr) return value
def __iter__(self): cursor = connection.cursor() result = cursor.execute(self.sql(), self.args()) if isinstance(self.sources, ModelList): description = cursor.description for row in result: res = [] for model in self.sources: mdesc = tuple((description[i][0], i) for i, c in enumerate(self.what) if c.model is model) if not mdesc: continue mrow = tuple(row[d[1]] for d in mdesc) res.append(model._orm_load(mrow, mdesc)) yield tuple(res) if len(res) > 1 else res[0] else: for row in result: yield row
def save(self): if not self._orm_dirty_attrs and not self._orm_new_row: return values = dict((getattr(type(self), attr), self._orm_adapt_attr(attr)) for attr in self._orm_dirty_attrs) if self._orm_new_row: q = Insert(self, values) else: if self._orm_pk_attr in self._orm_dirty_attrs: where = self._orm_where_pk(True) if self._orm_old_pk in self._orm_obj_cache: del self._orm_obj_cache[self._orm_old_pk] del self._orm_old_pk else: where = self._orm_where_pk() q = Update(self, values, where) cursor = connection.cursor() cursor.execute(q.sql(), q.args()) if self._orm_new_row: self._orm_new_row = False self._orm_setattr(self._orm_pk_attr, cursor.lastrowid) self._orm_dirty_attrs.clear() self._orm_obj_cache[self.pk] = self
def clear(self): u = Update(self.reference.other_column.model, {self.reference.other_column: None}, self.reference.other_column == self.where.rvalue) connection.cursor().execute(u.sql(), u.args())
def delete(self): if self.sources is None: raise TypeError("can't delete without sources") d = Delete(self.sources, self.where, self.order, self.slice) connection.cursor().execute(d.sql(), d.args())
def exists(self): s = Select(Sql('1'), self.sources, self.where, self.order, self.slice) return connection.cursor().execute(s.sql(), s.args()).fetchone() is not None
def __len__(self): s = Select(Sql('count(*)'), self.sources, self.where, self.order, self.slice) return connection.cursor().execute(s.sql(), s.args()).fetchone()[0]