diff --git a/cassandra/cqlengine/operators.py b/cassandra/cqlengine/operators.py index 0aa29d94..c4f9828f 100644 --- a/cassandra/cqlengine/operators.py +++ b/cassandra/cqlengine/operators.py @@ -60,6 +60,11 @@ class EqualsOperator(BaseWhereOperator): cql_symbol = '=' +class NotEqualsOperator(BaseWhereOperator): + symbol = 'NE' + cql_symbol = '!=' + + class InOperator(EqualsOperator): symbol = 'IN' cql_symbol = 'IN' diff --git a/cassandra/cqlengine/query.py b/cassandra/cqlengine/query.py index f9e1a75d..3f9414a2 100644 --- a/cassandra/cqlengine/query.py +++ b/cassandra/cqlengine/query.py @@ -560,10 +560,11 @@ class AbstractQuerySet(object): raise QueryException('{0} is not a valid query operator'.format(operator)) clone._conditional.append(operator) - for col_name, val in kwargs.items(): + for arg, val in kwargs.items(): if isinstance(val, Token): raise QueryException("Token() values are not valid in conditionals") + col_name, col_op = self._parse_filter_arg(arg) try: column = self.model._get_column(col_name) except KeyError: @@ -574,7 +575,9 @@ class AbstractQuerySet(object): else: query_val = column.to_database(val) - clone._conditional.append(ConditionalClause(col_name, query_val)) + operator_class = BaseWhereOperator.get_operator(col_op or 'EQ') + operator = operator_class() + clone._conditional.append(WhereClause(column.db_field_name, operator, query_val)) return clone diff --git a/cassandra/cqlengine/statements.py b/cassandra/cqlengine/statements.py index f5f626a4..aaa6d5bf 100644 --- a/cassandra/cqlengine/statements.py +++ b/cassandra/cqlengine/statements.py @@ -527,8 +527,6 @@ class BaseCQLStatement(UnicodeMixin): :param clause: The clause that will be added to the iff statement :type clause: ConditionalClause """ - if not isinstance(clause, ConditionalClause): - raise StatementException('only instances of AssignmentClause can be added to statements') clause.set_context_id(self.context_counter) self.context_counter += clause.get_context_size() self.conditionals.append(clause)