【问题标题】:Simple SQLAlchemy query filter in pythonpython中的简单SQLAlchemy查询过滤器
【发布时间】:2013-10-14 21:04:30
【问题描述】:

我正在尝试选择 sql 表中文本列的前四个字符与某个字符串匹配的所有行。 (后端数据库是一个sqlite实例,列类型有限,请多多包涵)

我为选择编写的代码是这样的:

    rows = SECtable.query.filter(str(SECtable.date)[:4] == str(matchingString)).all()

我在这里做错了什么?查询从不匹配任何行

【问题讨论】:

  • 不要忘记,您可以通过省略“all()”并打印结果查询来轻松调试生成的查询。所以,query = SECtable.query.filter(...); print query.

标签: python sqlalchemy flask-sqlalchemy


【解决方案1】:

如果您使用SECtable.date == 'some_string',这将生成一个表达式 (sqlalchemy.sql.expression.BinaryExpression),当您执行查询时将对其进行计算。

str(SECtable.date)[:4] == str(matchingString) 被立即评估,它产生SECtable.date 的字符串表示(我猜是'SECTable.date'),并将除拳头之外的所有字符与str(matchingString) 进行比较。所以你在这里写的基本上是:

'able.date' == str(matchingString)

这可能会被评估为假,所以你最终会得到filter(False)

sqlalchemy 提供了一个endswith 功能,您可以在这种情况下使用:

rows = SECtable.query.filter(SECtable.date.endswith(matchingString)).all()

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2015-01-15
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 2013-01-03
    • 2017-03-24
    相关资源
    最近更新 更多