【问题标题】:SQLAlchemy - Issue w/ func.lowerSQLAlchemy - 带有 func.lower 的问题
【发布时间】:2015-11-14 22:56:24
【问题描述】:

我正在开发一个利用 SQLAlchemy 的烧瓶应用程序。我更新了我的应用程序以指向 PostgresQL 数据库,但我被一段小而重要的代码挂断了:

records = Record.query.filter(func.lower(Record.name.like('{}%'.format(point)))).all()

在过去,这运行没有问题。现在我正在使用 Postgres 和 psycopg2 我收到以下错误:

ProgrammingError: (psycopg2.ProgrammingError) function lower(boolean) does not exist

LINE 3: WHERE lower(record.name LIKE 'a%')
              ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
 [SQL: 'SELECT record.id, record.name
        FROM record
        WHERE lower(record.name LIKE %(name_1)s)'] [parameters: {'name_1': 'a%'}]   

我是烧瓶和网络应用程序的新手,但我理解使用 ORM 意味着我应该能够相对轻松地换出数据库,并且所有现有代码都应该毫无问题地运行。

注意:x = Record.query.order_by(func.lower(Record.name)).all() 运行没有问题

【问题讨论】:

  • WHERE lower(record.name) LIKE 'a%'WHERE record.name ILIKE 'a%'(ILIKE 不区分大小写 LIKE,因此无需调用 lower())
  • WHERE lower(record.name) LIKE 'a%'

标签: python postgresql flask-sqlalchemy psycopg2


【解决方案1】:

LIKE 区分大小写,ILIKE 不区分大小写。

使用ILIKE你不需要使用lower

records = record.query.filter(Record.name.ilike('{}%'.format(point))).all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 2010-11-01
    • 1970-01-01
    • 2010-10-22
    • 2022-11-17
    • 2010-11-03
    • 2021-04-10
    • 2017-09-26
    相关资源
    最近更新 更多