Skip to main content
 首页 » 编程设计

python之SQLAlchemy之给定一个 Query 对象,你能确定是否已经应用了限制吗

2025年05月04日17jyk

如果您执行这样的查询:

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

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

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

请您参考如下方法:

据我了解,您可以检查是否有 _limit 私有(private)属性集:

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 是否在查询语句内,但是如果不小心将“limit”用作列/表名称的一部分,这很容易失败,或者是一个字面的“限制”,或者以除具有特殊含义之外的任何其他方式存在。