In the code above, there is no difference. This is because, in line 3 of the first example:
- the
query
property is explicitly bound to DBSession
- there is no custom
Query
object passed to query_property
As @petr-viktorin points out in the answer here, there must be a session available before you define your model in the first example, which might be problematic depending on the structure of your application.
If, however, you need a custom query that adds additional query parameters automatically to all queries, then only the first example will allow that. A custom query class that inherits from sqlalchemy.orm.query.Query
can be passed as an argument to query_property
. This question shows an example of that pattern.
Even if a model object has a custom query property defined on it, that property is not used when querying with session.query
, as in the last line in the second example. This means something like the first example the only option if you need a custom query class.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…