【发布时间】:2018-06-02 22:45:56
【问题描述】:
我在 Postgres 表中有一个文本数组列,其中包含用户的电子邮件和替代电子邮件地址。
我正在使用 Flask 和 SQLAlchemy,我想在数据库中查询用户输入的电子邮件包含在数组中的行。目前我正在使用 .contains
Users.query.filter(Users.emails.contains({email})).first()
我遇到的问题是一些现有的电子邮件地址混合了大小写,但是我似乎找不到使数组变小或查询不区分大小写的方法。
我查看了 func.lower 但这并不想很好地与数组一起使用,另一个选项是 .ilike 但是我似乎无法让它工作,我的表大约有 10,000 行和 .ilike我认为不会是最有效的?
最好的方法是什么?
【问题讨论】:
-
一个肮脏的解决方案是将数组转换为文本
lower(),然后检查。不过,对性能不太友好。更简洁的方法涉及更多,但请查看unnest()和 array constructors。 -
@IljaEverilä,非常感谢您提供指向
unnest()的指针!
标签: python postgresql flask sqlalchemy flask-sqlalchemy