class Query(BaseExpression):
Known subclasses: django.db.models.sql.subqueries.AggregateQuery
, django.db.models.sql.subqueries.DeleteQuery
, django.db.models.sql.subqueries.InsertQuery
, django.db.models.sql.subqueries.UpdateQuery
Class Method | _gen_col_aliases |
Undocumented |
Class Method | _gen_cols |
Undocumented |
Method | __deepcopy__ |
Limit the amount of work when a Query is deepcopied. |
Method | __init__ |
Undocumented |
Method | __str__ |
Return the query as a string of SQL with the parameter values substituted in (use sql_with_params() to see the unsubstituted string). |
Method | _add_q |
Add a Q-object to the current filter. |
Method | _get_col |
Undocumented |
Method | add_annotation |
Add a single annotation expression to the Query. |
Method | add_deferred_loading |
No summary |
Method | add_distinct_fields |
Add and resolve the given fields to the query's "distinct on" clause. |
Method | add_extra |
Add data to the various extra_* attributes for user-created additions to the query. |
Method | add_fields |
Add the given (model) fields to the select set. Add the field names in the order specified. |
Method | add_filter |
Undocumented |
Method | add_filtered_relation |
Undocumented |
Method | add_immediate_loading |
No summary |
Method | add_ordering |
No summary |
Method | add_q |
A preprocessor for the internal _add_q(). Responsible for doing final join promotion. |
Method | add_select_col |
Undocumented |
Method | add_select_related |
Set up the select_related data structure so that we only select certain related models (as opposed to all models, when self.select_related=True). |
Method | append_annotation_mask |
Undocumented |
Method | as_sql |
Responsible for returning a (sql, [params]) tuple to be included in the current query. |
Method | build_filter |
Build a WhereNode for a single filter clause but don't add it to this Query. Query.add_q() will then add this filter to the where Node. |
Method | build_filtered_relation_q |
Add a FilteredRelation object to the current filter. |
Method | build_lookup |
Try to extract transforms and lookup from given lhs. |
Method | build_where |
Undocumented |
Method | bump_prefix |
No summary |
Method | can_filter |
Return True if adding filters to this instance is still possible. |
Method | chain |
Return a copy of the current Query that's ready for another operation. The klass argument changes the type of the Query, e.g. UpdateQuery. |
Method | change_aliases |
Change the aliases in change_map (which maps old-alias -> new-alias), relabelling any references to them in select columns and the where clause. |
Method | check_filterable |
Raise an error if expression cannot be used in a WHERE clause. |
Method | check_query_object_type |
Check whether the object passed while querying is of the correct type. If not, raise a ValueError specifying the wrong object. |
Method | check_related_objects |
Check the type of object passed to query relations. |
Method | clear_deferred_loading |
Remove any fields from the deferred loading set. |
Method | clear_limits |
Clear any existing limits. |
Method | clear_ordering |
No summary |
Method | clear_select_clause |
Remove all fields from SELECT clause. |
Method | clear_select_fields |
Clear the list of fields to select (but not extra_select columns). Some queryset types completely replace any existing list of select columns. |
Method | clear_where |
Undocumented |
Method | clone |
Return a copy of the current Query. A lightweight alternative to to deepcopy(). |
Method | combine |
Merge the 'rhs' query into the current one (with any 'rhs' effects being applied after (that is, "to the right of") anything in the current query. 'rhs' is not modified during a call to this function. |
Method | count_active_tables |
Return the number of tables in this query with a non-zero reference count. After execution, the reference counts are zeroed, so tables added in compiler will not be seen by this method. |
Method | deferred_to_data |
No summary |
Method | demote_joins |
Change join type from LOUTER to INNER for all joins in aliases. |
Method | exists |
Undocumented |
Method | explain |
Undocumented |
Method | get_aggregation |
Return the dictionary with the values of the existing aggregations. |
Method | get_compiler |
Undocumented |
Method | get_count |
Perform a COUNT() query using the current filter constraints. |
Method | get_external_cols |
Undocumented |
Method | get_initial_alias |
Return the first alias for this query, after increasing its reference count. |
Method | get_loaded_field_names |
No summary |
Method | get_loaded_field_names_cb |
Callback used by get_deferred_field_names(). |
Method | get_meta |
Return the Options instance (the model._meta) from which to start processing. Normally, this is self.model._meta, but it can be changed by subclasses. |
Method | has_filters |
Undocumented |
Method | has_limit_one |
Undocumented |
Method | has_results |
Undocumented |
Method | is_empty |
Undocumented |
Method | is_nullable |
Check if the given field should be treated as nullable. |
Method | join |
Return an alias for the 'join', either reusing an existing alias for that join or creating a new one. 'join' is either a sql.datastructures.BaseTable or Join. |
Method | join_parent_model |
Make sure the given 'model' is joined in the query. If 'model' isn't a parent of 'opts' or if it is None this method is a no-op. |
Method | names_to_path |
Walk the list of names and turns them into PathInfo tuples. A single name in 'names' can generate multiple PathInfos (m2m, for example). |
Method | promote_joins |
Promote recursively the join type of given aliases and its children to an outer join. If 'unconditional' is False, only promote the join if it is nullable or the parent join is an outer join. |
Method | ref_alias |
Increases the reference count for this alias. |
Method | relabeled_clone |
Undocumented |
Method | reset_refcounts |
Reset reference counts for aliases so that they match the value passed in to_counts . |
Method | resolve_expression |
Provide the chance to do any preprocessing or validation before being added to the query. |
Method | resolve_lookup_value |
Undocumented |
Method | resolve_ref |
Undocumented |
Method | rewrite_cols |
Undocumented |
Method | set_annotation_mask |
Set the mask of annotations that will be returned by the SELECT. |
Method | set_empty |
Undocumented |
Method | set_extra_mask |
Set the mask of extra select items that will be returned by SELECT. Don't remove them from the Query since they might be used later. |
Method | set_group_by |
Expand the GROUP BY clause required by the query. |
Method | set_limits |
Adjust the limits on the rows retrieved. Use low/high to set these, as it makes it more Pythonic to read and write. When the SQL query is created, convert them to the appropriate offset and limit values. |
Method | set_select |
Undocumented |
Method | set_values |
Undocumented |
Method | setup_joins |
No summary |
Method | solve_lookup_type |
Solve the lookup type from the lookup (e.g.: 'foobar__id__icontains'). |
Method | split_exclude |
No summary |
Method | sql_with_params |
Return the query as an SQL string and the parameters that will be substituted into the query. |
Method | table_alias |
Return a table alias for the given table_name and whether this is a new alias or not. |
Method | trim_joins |
The 'target' parameter is the final field being joined to, 'joins' is the full list of join aliases. The 'path' contain the PathInfos used to create the joins. |
Method | trim_start |
Trim joins from the start of the join path. The candidates for trim are the PathInfos in names_with_path structure that are m2m joins. |
Method | try_transform |
Helper method for build_lookup(). Try to fetch and initialize a transform for name parameter from lhs. |
Method | unref_alias |
Decreases the reference count for this alias. |
Class Variable | compiler |
Undocumented |
Class Variable | empty_result_set_value |
Undocumented |
Instance Variable | _annotation_select_cache |
Undocumented |
Instance Variable | _extra_select_cache |
Undocumented |
Instance Variable | _filtered_relations |
Undocumented |
Instance Variable | _loaded_field_names_cache |
Undocumented |
Instance Variable | _lookup_joins |
Undocumented |
Instance Variable | alias_cols |
Undocumented |
Instance Variable | alias_map |
Undocumented |
Instance Variable | alias_prefix |
Undocumented |
Instance Variable | alias_refcount |
Undocumented |
Instance Variable | annotation_select_mask |
Undocumented |
Instance Variable | annotations |
Undocumented |
Instance Variable | combinator |
Undocumented |
Instance Variable | combinator_all |
Undocumented |
Instance Variable | combined_queries |
Undocumented |
Instance Variable | default_cols |
Undocumented |
Instance Variable | default_ordering |
Undocumented |
Instance Variable | deferred_loading |
Undocumented |
Instance Variable | distinct |
Undocumented |
Instance Variable | distinct_fields |
Undocumented |
Instance Variable | explain_info |
Undocumented |
Instance Variable | external_aliases |
Undocumented |
Instance Variable | extra |
Undocumented |
Instance Variable | extra_order_by |
Undocumented |
Instance Variable | extra_select_mask |
Undocumented |
Instance Variable | extra_tables |
Undocumented |
Instance Variable | filter_is_sticky |
Undocumented |
Instance Variable | group_by |
Undocumented |
Instance Variable | high_mark |
Undocumented |
Instance Variable | low_mark |
Undocumented |
Instance Variable | max_depth |
Undocumented |
Instance Variable | model |
Undocumented |
Instance Variable | order_by |
Undocumented |
Instance Variable | select |
Undocumented |
Instance Variable | select_for_no_key_update |
Undocumented |
Instance Variable | select_for_update |
Undocumented |
Instance Variable | select_for_update_nowait |
Undocumented |
Instance Variable | select_for_update_of |
Undocumented |
Instance Variable | select_for_update_skip_locked |
Undocumented |
Instance Variable | select_related |
Undocumented |
Instance Variable | standard_ordering |
Undocumented |
Instance Variable | subq_aliases |
Undocumented |
Instance Variable | subquery |
Undocumented |
Instance Variable | table_map |
Undocumented |
Instance Variable | used_aliases |
Undocumented |
Instance Variable | values_select |
Undocumented |
Instance Variable | where |
Undocumented |
Property | annotation_select |
Return the dictionary of aggregate columns that are not masked and should be used in the SELECT clause. Cache this result for performance. |
Property | base_table |
Undocumented |
Property | extra_select |
Undocumented |
Property | has_select_fields |
Undocumented |
Property | is_sliced |
Undocumented |
Property | output_field |
Return the output type of this expressions. |
Inherited from BaseExpression
:
Static Method | _convert_value_noop |
Undocumented |
Method | __getstate__ |
Undocumented |
Method | _parse_expressions |
Undocumented |
Method | _resolve_output_field |
Attempt to infer the output type of the expression. If the output fields of all source fields match then, simply infer the same type here. This isn't always correct, but it makes sense most of the time. |
Method | asc |
Undocumented |
Method | copy |
Undocumented |
Method | desc |
Undocumented |
Method | flatten |
Recursively yield this expression and all subexpressions, in depth-first order. |
Method | get_db_converters |
Undocumented |
Method | get_group_by_cols |
Undocumented |
Method | get_lookup |
Undocumented |
Method | get_source_expressions |
Undocumented |
Method | get_source_fields |
Return the underlying field types used by this aggregate. |
Method | get_transform |
Undocumented |
Method | reverse_ordering |
Undocumented |
Method | select_format |
Custom format for select clauses. For example, EXISTS expressions need to be wrapped in CASE WHEN on Oracle. |
Method | set_source_expressions |
Undocumented |
Class Variable | _output_field_resolved_to_none |
Undocumented |
Class Variable | filterable |
Undocumented |
Class Variable | is_summary |
Undocumented |
Class Variable | window_compatible |
Undocumented |
Property | _output_field_or_none |
Return the output field of this expression, or None if _resolve_output_field() didn't return an output type. |
Property | conditional |
Undocumented |
Property | contains_aggregate |
Undocumented |
Property | contains_column_references |
Undocumented |
Property | contains_over_clause |
Undocumented |
Property | convert_value |
Expressions provide their own converters because users have the option of manually specifying the output_field which may be a different type from the one the database returns. |
Property | field |
Undocumented |
Return the query as a string of SQL with the parameter values substituted in (use sql_with_params() to see the unsubstituted string).
Parameter values won't necessarily be quoted correctly, since that is done by the database interface at execution time.
Add items from the 'ordering' sequence to the query's "order by" clause. These items are either field names (not column names) -- possibly with a direction prefix ('-' or '?') -- or OrderBy expressions.
If 'ordering' is empty, clear all ordering from the query.
Responsible for returning a (sql, [params]) tuple to be included in the current query.
Different backends can provide their own implementation, by
providing an as_{vendor}
method and patching the Expression:
``` def override_as_sql(self, compiler, connection):
# custom logic return super().as_sql(compiler, connection)
setattr(Expression, 'as_' + connection.vendor, override_as_sql) ```
value
.sql
is a string containing ordered sql parameters to be
replaced with the elements of the list params
.Build a WhereNode for a single filter clause but don't add it to this Query. Query.add_q() will then add this filter to the where Node.
The 'branch_negated' tells us if the current branch contains any negations. This will be used to determine if subqueries are needed.
The 'current_negated' is used to determine if the current filter is negated or not and this will be used to determine if IS NULL filtering is needed.
The difference between current_negated and branch_negated is that branch_negated is set on first negation, but current_negated is flipped for each negation.
Note that add_filter will not do any negating itself, that is done upper in the code by add_q().
The 'can_reuse' is a set of reusable joins for multijoins.
The method will create a filter clause that can be added to the current query. However, if the filter isn't added to the query then the caller is responsible for unreffing the joins used.
Try to extract transforms and lookup from given lhs.
The lhs value is something that works like SQLExpression. The rhs value is what the lookup is going to compare against. The lookups is a list of names to extract using get_lookup() and get_transform().
Return True if adding filters to this instance is still possible.
Typically, this means no limits or offsets have been put on the results.
django.db.models.sql.subqueries.UpdateQuery
Merge the 'rhs' query into the current one (with any 'rhs' effects being applied after (that is, "to the right of") anything in the current query. 'rhs' is not modified during a call to this function.
The 'connector' parameter describes how to connect filters from the 'rhs' query.
Convert the self.deferred_loading data structure to an alternate data structure, describing the field that will be loaded. This is used to compute the columns to select from the database and also by the QuerySet class to work out which fields are being initialized on each model. Models that have all their fields included aren't mentioned in the result, only those that have field restrictions in place.
The "target" parameter is the instance that is populated (in place). The "callback" is a function that is called whenever a (model, field) pair need to be added to "target". It accepts three parameters: "target", and the model and list of fields being added for that model.
Change join type from LOUTER to INNER for all joins in aliases.
Similarly to promote_joins(), this method must ensure no join chains containing first an outer, then an inner join are generated. If we are demoting b->c join in chain a LOUTER b LOUTER c then we must demote a->b automatically, or otherwise the demotion of b->c doesn't actually change anything in the query results. .
If any fields are marked to be deferred, return a dictionary mapping models to a set of names in those fields that will be loaded. If a model is not in the returned dictionary, none of its fields are deferred.
If no fields are marked for deferral, return an empty dictionary.
Check if the given field should be treated as nullable.
Some backends treat '' as null and Django treats such fields as nullable for those backends. In such situations field.null can be False even if we should treat the field as nullable.
Return an alias for the 'join', either reusing an existing alias for that join or creating a new one. 'join' is either a sql.datastructures.BaseTable or Join.
The 'reuse' parameter can be either None which means all joins are reusable, or it can be a set containing the aliases that can be reused.
A join is always created as LOUTER if the lhs alias is LOUTER to make sure chains like t1 LOUTER t2 INNER t3 aren't generated. All new joins are created as LOUTER if the join is nullable.
Make sure the given 'model' is joined in the query. If 'model' isn't a parent of 'opts' or if it is None this method is a no-op.
The 'alias' is the root alias for starting the join, 'seen' is a dict of model -> alias of existing joins. It must also contain a mapping of None -> some alias. This will be returned in the no-op case.
Walk the list of names and turns them into PathInfo tuples. A single name in 'names' can generate multiple PathInfos (m2m, for example).
'names' is the path of names to travel, 'opts' is the model Options we start the name resolving from, 'allow_many' is as for setup_joins(). If fail_on_missing is set to True, then a name that can't be resolved will generate a FieldError.
Return a list of PathInfo tuples. In addition return the final field (the last used join field) and target (which is a field guaranteed to contain the same value as the final field). Finally, return those names that weren't found (which are likely transforms and the final lookup).
Promote recursively the join type of given aliases and its children to an outer join. If 'unconditional' is False, only promote the join if it is nullable or the parent join is an outer join.
The children promotion is done to avoid join chains that contain a LOUTER b INNER c. So, if we have currently a INNER b INNER c and a->b is promoted, then we must also promote b->c automatically, or otherwise the promotion of a->b doesn't actually change anything in the query results.
to_counts
.Provide the chance to do any preprocessing or validation before being added to the query.
Return: an Expression to be added to the query.
Expand the GROUP BY clause required by the query.
This will usually be the set of all non-aggregate fields in the return data. If the database backend supports grouping by the primary key, and the query would be equivalent, the optimization will be made automatically.
Adjust the limits on the rows retrieved. Use low/high to set these, as it makes it more Pythonic to read and write. When the SQL query is created, convert them to the appropriate offset and limit values.
Apply any limits passed in here to the existing constraints. Add low to the current low value and clamp both to any existing high value.
Compute the necessary table joins for the passage through the fields given in 'names'. 'opts' is the Options class for the current model (which gives the table we are starting from), 'alias' is the alias for the table to start the joining from.
The 'can_reuse' defines the reverse foreign key joins we can reuse. It can be None in which case all joins are reusable or a set of aliases that can be reused. Note that non-reverse foreign keys are always reusable when using setup_joins().
If 'allow_many' is False, then any reverse foreign key seen will generate a MultiJoin exception.
Return the final field involved in the joins, the target field (used
for any 'where' constraint), the final 'opts' value, the joins, the
field path traveled to generate the joins, and a transform function
that takes a field and alias and is equivalent to field.get_col(alias)
in the simple case but wraps field transforms if they were included in
names.
The target field is the field containing the concrete value. Final field can be something different, for example foreign key pointing to that value. Final field is needed for example in some value conversions (convert 'obj' in fk__id=obj to pk val using the foreign key field for example).
When doing an exclude against any kind of N-to-many relation, we need to use a subquery. This method constructs the nested query, given the original exclude filter (filter_expr) and the portion up to the first N-to-many relation field.
For example, if the origin filter is ~Q(child__name='foo'), filter_expr is ('child__name', 'foo') and can_reuse is a set of joins usable for filters in the original query.
)
Return a table alias for the given table_name and whether this is a new alias or not.
If 'create' is true, a new alias is always created. Otherwise, the most recently created alias for the table (if one exists) is reused.
The 'target' parameter is the final field being joined to, 'joins' is the full list of join aliases. The 'path' contain the PathInfos used to create the joins.
Return the final target field and table alias and the new active joins.
Always trim any direct join if the target column is already in the previous table. Can't trim reverse joins as it's unknown if there's anything on the other side of the join.
Trim joins from the start of the join path. The candidates for trim are the PathInfos in names_with_path structure that are m2m joins.
Also set the select column so the start matches the join.
This method is meant to be used for generating the subquery joins & cols in split_exclude().
Return a lookup usable for doing outerq.filter(lookup=self) and a boolean indicating if the joins in the prefix contain a LEFT OUTER join. _