gpt4 book ai didi

python - 为什么使用 SqlAlchemy func.lower(string) 与 string.lower()?

转载 作者:行者123 更新时间:2023-11-28 21:47:17 26 4
gpt4 key购买 nike

看看这个答案:Case Insensitive Flask-SQLAlchemy Query

为什么使用 SQLAlchemy 的 func.lower(mystring) 而不是 python 的原生 mystring.lower() 更好?

最佳答案

上下文很重要。

user = models.User.query.filter(func.lower(User.username) == func.lower("GaNyE")).first()

这里,没有lower方法调用的字符串;您正在编写要在数据库中执行的 SQL 命令。 func.lower 不返回小写字符串;它返回一个表示可用于生成小写字符串的 SQL 代码的对象。


正如 mgilson 指出的,没有必要对实际的 Python 值使用 func.lower;它们对于应用过滤器的每一行都是不变的,但我不确定 SQLAlchemy 是否能够检测和优化这种情况。以下任一项

user = models.User.query.filter(func.lower(User.username) == "ganye").first()
user = models.User.query.filter(func.lower(User.username) == "GaNyE".lower()).first()

会生成像lower(username) = :lower_1这样的SQL代码,而不是lower(username) = lower(:lower_1),这样可以使SQL查询更有效率通过消除对每一行的 lower 的调用。

关于python - 为什么使用 SqlAlchemy func.lower(string) 与 string.lower()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com