当前位置: 首页>>代码示例>>Python>>正文


Python statements.UpdateStatement类代码示例

本文整理汇总了Python中cqlengine.statements.UpdateStatement的典型用法代码示例。如果您正苦于以下问题:Python UpdateStatement类的具体用法?Python UpdateStatement怎么用?Python UpdateStatement使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


在下文中一共展示了UpdateStatement类的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: update

    def update(self, **values):
        """ Updates the rows in this queryset """
        if not values:
            return

        nulled_columns = set()
        us = UpdateStatement(self.column_family_name, where=self._where, ttl=self._ttl, timestamp=self._timestamp)
        for name, val in values.items():
            col = self.model._columns.get(name)
            # check for nonexistant columns
            if col is None:
                raise ValidationError("{}.{} has no column named: {}".format(self.__module__, self.model.__name__, name))
            # check for primary key update attempts
            if col.is_primary_key:
                raise ValidationError("Cannot apply update to primary key '{}' for {}.{}".format(name, self.__module__, self.model.__name__))

            val = col.validate(val)
            if val is None:
                nulled_columns.add(name)
                continue
            # add the update statements
            if isinstance(col, Counter):
                # TODO: implement counter updates
                raise NotImplementedError
            else:
                us.add_assignment_clause(AssignmentClause(name, col.to_database(val)))

        if us.assignments:
            self._execute(us)

        if nulled_columns:
            ds = DeleteStatement(self.column_family_name, fields=nulled_columns, where=self._where)
            self._execute(ds)
开发者ID:thedrow,项目名称:cqlengine,代码行数:33,代码来源:query.py

示例2: update

    def update(self):
        """
        updates a row.
        This is a blind update call.
        All validation and cleaning needs to happen
        prior to calling this.
        """
        if self.instance is None:
            raise CQLEngineException("DML Query intance attribute is None")
        assert type(self.instance) == self.model
        static_update_only = True
        statement = UpdateStatement(self.column_family_name, ttl=self._ttl,
                                    timestamp=self._timestamp, transactions=self._transaction)
        #get defined fields and their column names
        for name, col in self.model._columns.items():
            if not col.is_primary_key:
                val = getattr(self.instance, name, None)
                val_mgr = self.instance._values[name]

                # don't update something that is null
                if val is None:
                    continue

                # don't update something if it hasn't changed
                if not val_mgr.changed and not isinstance(col, Counter):
                    continue
                
                static_update_only = (static_update_only and col.static)
                if isinstance(col, (BaseContainerColumn, Counter)):
                    # get appropriate clause
                    if isinstance(col, List): klass = ListUpdateClause
                    elif isinstance(col, Map): klass = MapUpdateClause
                    elif isinstance(col, Set): klass = SetUpdateClause
                    elif isinstance(col, Counter): klass = CounterUpdateClause
                    else: raise RuntimeError

                    # do the stuff
                    clause = klass(col.db_field_name, val,
                            previous=val_mgr.previous_value, column=col)
                    if clause.get_context_size() > 0:
                        statement.add_assignment_clause(clause)
                else:
                    statement.add_assignment_clause(AssignmentClause(
                        col.db_field_name,
                        col.to_database(val)
                    ))

        if statement.get_context_size() > 0 or self.instance._has_counter:
            for name, col in self.model._primary_keys.items():
                if static_update_only and (not col.partition_key):
                    continue
                statement.add_where_clause(WhereClause(
                    col.db_field_name,
                    EqualsOperator(),
                    col.to_database(getattr(self.instance, name))
                ))
            self._execute(statement)

        self._delete_null_columns()
开发者ID:amygdalama,项目名称:cqlengine,代码行数:59,代码来源:query.py

示例3: update

    def update(self, **values):
        """ Updates the rows in this queryset """
        if not values:
            return

        nulled_columns = set()
        us = UpdateStatement(self.column_family_name, where=self._where, ttl=self._ttl,
                             timestamp=self._timestamp, transactions=self._transaction)
        for name, val in values.items():
            col_name, col_op = self._parse_filter_arg(name)
            col = self.model._columns.get(col_name)
            # check for nonexistant columns
            if col is None:
                raise ValidationError("{}.{} has no column named: {}".format(self.__module__, self.model.__name__, col_name))
            # check for primary key update attempts
            if col.is_primary_key:
                raise ValidationError("Cannot apply update to primary key '{}' for {}.{}".format(col_name, self.__module__, self.model.__name__))

            # we should not provide default values in this use case.
            val = col.validate(val)
            
            if val is None:
                nulled_columns.add(col_name)
                continue

            # add the update statements
            if isinstance(col, Counter):
                # TODO: implement counter updates
                raise NotImplementedError
            elif isinstance(col, (List, Set, Map)):
                if isinstance(col, List):
                    klass = ListUpdateClause
                elif isinstance(col, Set):
                    klass = SetUpdateClause
                elif isinstance(col, Map):
                    klass = MapUpdateClause
                else:
                    raise RuntimeError
                us.add_assignment_clause(klass(col_name, col.to_database(val), operation=col_op))
            else:
                us.add_assignment_clause(AssignmentClause(
                    col_name, col.to_database(val)))

        if us.assignments:
            self._execute(us)

        if nulled_columns:
            ds = DeleteStatement(self.column_family_name, fields=nulled_columns, where=self._where)
            self._execute(ds)
开发者ID:KonstantinG,项目名称:cqlengine,代码行数:49,代码来源:query.py

示例4: test_context_update

 def test_context_update(self):
     us = UpdateStatement("table")
     us.add_assignment_clause(AssignmentClause("a", "b"))
     us.add_assignment_clause(AssignmentClause("c", "d"))
     us.add_where_clause(WhereClause("a", EqualsOperator(), "x"))
     us.update_context_id(3)
     self.assertEqual(unicode(us), 'UPDATE table SET "a" = :4, "c" = :5 WHERE "a" = :3')
     self.assertEqual(us.get_context(), {"4": "b", "5": "d", "3": "x"})
开发者ID:dokai,项目名称:cqlengine,代码行数:8,代码来源:test_update_statement.py

示例5: test_context_update

 def test_context_update(self):
     us = UpdateStatement('table')
     us.add_assignment_clause(AssignmentClause('a', 'b'))
     us.add_assignment_clause(AssignmentClause('c', 'd'))
     us.add_where_clause(WhereClause('a', EqualsOperator(), 'x'))
     us.update_context_id(3)
     self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = %(4)s, "c" = %(5)s WHERE "a" = %(3)s')
     self.assertEqual(us.get_context(), {'4': 'b', '5': 'd', '3': 'x'})
开发者ID:jpuerta,项目名称:cqlengine,代码行数:8,代码来源:test_update_statement.py

示例6: save

    def save(self, *objects):
        """Flush all pending changes to Cassandra.

        objects -- if not None, only operate on this or these object(s)

        """
        updates = set()
        counter_updates = set()
        creates = set()
        counter_creates = set()
        for model_class, by_key in self.instances_by_class.iteritems():
            for key, instance in by_key.iteritems():
                if hasattr(instance, '_created') and instance._created:
                    if model_class.id_mapped_class._has_counter:
                        counter_creates.add(instance)
                    else:
                        creates.add(instance)
                elif hasattr(instance, '_dirties'):
                    if model_class.id_mapped_class._has_counter:
                        counter_updates.add(instance)
                    else:
                        updates.add(instance)
        if objects:
            updates = updates and objects
            counter_updates = counter_updates and objects
            creates = creates and objects
            counter_creates = counter_creates and objects

        with BatchQuery() as batch:
            for create in creates:
                # Note we skip a lot of cqlengine code and create the
                # insert statement directly.
                # (this is the non-optimized code that is replaced below)
                #key_names = create.id_mapped_class._columns.keys()
                #arg = {name: getattr(create, name) for name in key_names}
                #create.id_mapped_class.batch(batch).create(**arg)
                # (end non-optimized code)
                # (begin optimized)
                # note: it might save time to memoize column family name
                # note: cqlengine-session doesn't yet support 'ttl'
                insert = InsertStatement(create.id_mapped_class.column_family_name())#, ttl=self._ttl)
                for name, col in create.id_mapped_class._columns.items():
                    val = col.validate(getattr(create, name))
                    if col._val_is_null(val):
                        continue
                    insert.add_assignment_clause(AssignmentClause(
                        col.db_field_name,
                        col.to_database(val)))
                # skip query execution if it's empty
                # caused by pointless update queries
                if not insert.is_empty:
                    batch.add_query(insert)
                # (end optimized)
                del create._created
                try:
                    del create._dirties
                except AttributeError:
                    pass
            for update in updates:
                key_names = update._primary_keys.keys()
                arg = {name: getattr(update, name) for name in key_names}
                dirties = update._dirties
                update.id_mapped_class.objects(**arg).batch(batch).update(**dirties)
                del update._dirties
        # It would seem that batch does not work with counter?
        #with BatchQuery() as batch:
        for create in counter_creates:
            primary_key_names = create.id_mapped_class._primary_keys.keys()
            arg = {name: getattr(create, name) for name in primary_key_names}
            instance = create.id_mapped_class.create(**arg)
            for name, col in create.id_mapped_class._columns.items():
                if isinstance(col, columns.Counter):
                    val = getattr(create, name)
                    setattr(instance, name, val)
            del create._created
            try:
                del create._dirties
            except AttributeError:
                pass
            instance.update()
        for update in counter_updates:
            statement = UpdateStatement(update.id_mapped_class.column_family_name())#, ttl=self._ttl)
            for name, value in update._dirties.items():
                col = update.id_mapped_class._columns[name]
                clause = CounterUpdateClause(col.db_field_name, value, 0, column=col)
                statement.add_assignment_clause(clause)
            for name, col in update.id_mapped_class._primary_keys.items():
                statement.add_where_clause(WhereClause(
                    col.db_field_name,
                    EqualsOperator(),
                    col.to_database(getattr(update, name))
                ))
            params = statement.get_context()
            statement = SimpleStatement(str(statement))
            cqlengine.connection.get_session().execute(statement, params)
            del update._dirties
#            for delete in self.deletes:
#                raise NotImplementedError
        for callable, args, kwargs in self.call_after_save:
            callable(*args, **kwargs)
#.........这里部分代码省略.........
开发者ID:chillinc,项目名称:CQLEngine-Session,代码行数:101,代码来源:cqlengine_session.py

示例7: test_additional_rendering

 def test_additional_rendering(self):
     us = UpdateStatement("table", ttl=60)
     us.add_assignment_clause(AssignmentClause("a", "b"))
     us.add_where_clause(WhereClause("a", EqualsOperator(), "x"))
     self.assertIn("USING TTL 60", unicode(us))
开发者ID:dokai,项目名称:cqlengine,代码行数:5,代码来源:test_update_statement.py

示例8: test_context

 def test_context(self):
     us = UpdateStatement("table")
     us.add_assignment_clause(AssignmentClause("a", "b"))
     us.add_assignment_clause(AssignmentClause("c", "d"))
     us.add_where_clause(WhereClause("a", EqualsOperator(), "x"))
     self.assertEqual(us.get_context(), {"0": "b", "1": "d", "2": "x"})
开发者ID:dokai,项目名称:cqlengine,代码行数:6,代码来源:test_update_statement.py

示例9: test_rendering

 def test_rendering(self):
     us = UpdateStatement("table")
     us.add_assignment_clause(AssignmentClause("a", "b"))
     us.add_assignment_clause(AssignmentClause("c", "d"))
     us.add_where_clause(WhereClause("a", EqualsOperator(), "x"))
     self.assertEqual(unicode(us), 'UPDATE table SET "a" = :0, "c" = :1 WHERE "a" = :2', unicode(us))
开发者ID:dokai,项目名称:cqlengine,代码行数:6,代码来源:test_update_statement.py

示例10: test_update_list_append_with_empty_list

 def test_update_list_append_with_empty_list(self):
     us = UpdateStatement('table')
     us.add_assignment_clause(ListUpdateClause('a', List.Quoter([]), operation='append'))
     self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" + %(0)s')
开发者ID:jpuerta,项目名称:cqlengine,代码行数:4,代码来源:test_update_statement.py

示例11: test_update_empty_set_removal_does_not_assign

 def test_update_empty_set_removal_does_not_assign(self):
     us = UpdateStatement('table')
     us.add_assignment_clause(SetUpdateClause('a', Set.Quoter(set()), operation='remove'))
     self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" - %(0)s')
开发者ID:jpuerta,项目名称:cqlengine,代码行数:4,代码来源:test_update_statement.py

示例12: test_update_set_add

 def test_update_set_add(self):
     us = UpdateStatement('table')
     us.add_assignment_clause(SetUpdateClause('a', Set.Quoter(set([1])), operation='add'))
     self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = "a" + %(0)s')
开发者ID:jpuerta,项目名称:cqlengine,代码行数:4,代码来源:test_update_statement.py

示例13: test_additional_rendering

 def test_additional_rendering(self):
     us = UpdateStatement('table', ttl=60)
     us.add_assignment_clause(AssignmentClause('a', 'b'))
     us.add_where_clause(WhereClause('a', EqualsOperator(), 'x'))
     self.assertIn('USING TTL 60', six.text_type(us))
开发者ID:jpuerta,项目名称:cqlengine,代码行数:5,代码来源:test_update_statement.py

示例14: test_rendering

 def test_rendering(self):
     us = UpdateStatement('table')
     us.add_assignment_clause(AssignmentClause('a', 'b'))
     us.add_assignment_clause(AssignmentClause('c', 'd'))
     us.add_where_clause(WhereClause('a', EqualsOperator(), 'x'))
     self.assertEqual(six.text_type(us), 'UPDATE table SET "a" = %(0)s, "c" = %(1)s WHERE "a" = %(2)s', six.text_type(us))
开发者ID:jpuerta,项目名称:cqlengine,代码行数:6,代码来源:test_update_statement.py


注:本文中的cqlengine.statements.UpdateStatement类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。