Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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())
Ejemplo n.º 6
0
 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())
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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]