【问题标题】:Case insensitive array query Flask-SQLAlchemy不区分大小写的数组查询 Flask-SQLAlchemy
【发布时间】: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


【解决方案1】:

我最终只使用了原始 SQL,它成功了。

db.engine.execute("SELECT * FROM Users WHERE '%s' = ANY(lower(emails::text)::text[])" % email)

【讨论】:

猜你喜欢
  • 2013-05-10
  • 2022-01-07
  • 2018-08-15
  • 2022-01-20
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多