SQLAlchemy - 给定一个Query对象,您可以确定是否已经应用了限制?

时间:2016-09-23 19:29:17

标签: python sqlalchemy

如果你这样做一个查询:

models.Article.query.limit(5).limit(10)

限制实际上是10,5被覆盖。

我有一些代码想要对Query应用限制,但仅限于尚未应用的限制。有没有办法确定是否已经存在限制,短于if 'LIMIT' in str(query):

1 个答案:

答案 0 :(得分:6)

根据我的理解,您可以检查是否存在_limit私有属性集:

query = models.Article.query.limit(5)
print(query._limit)  # prints 5

query = models.Article.query
print(query._limit)  # prints None

这可能是检查应用限制是否存在的最直接方法,因为limit() method本身就是这样做的:

@_generative(_no_statement_condition)
def limit(self, limit):
    """Apply a ``LIMIT`` to the query and return the newly resulting

    ``Query``.

    """
    self._limit = limit

您还可以在字符串检查中执行子字符串 - 查看LIMIT是否在查询语句中,但如果"限制"被意外地用作列/表名的一部分或作为文字"限制"或以任何其他方式存在,除非具有特殊含义。