Python中简单的SQLAlchemy查询过滤器

时间:2013-10-14 21:04:30

标签: python sqlalchemy flask-sqlalchemy

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

我为select编写的代码是:

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

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

2 个答案:

答案 0 :(得分:2)

如果使用SECtable.date == 'some_string',则会生成一个表达式(sqlalchemy.sql.expression.BinaryExpression),在执行查询时将对其进行评估。

立即评估

str(SECtable.date)[:4] == str(matchingString),它会生成SECtable.date的字符串表示形式(我猜是'SECTable.date'),并将除了第一个字符之外的所有字符与str(matchingString)进行比较。所以你在这里写的基本上是:

'able.date' == str(matchingString)

可能会评估为false,因此您最终得到filter(False)

sqlalchemy提供了在这种情况下可以使用的endswith功能:

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

答案 1 :(得分:1)