我正在尝试选择sql表中的所有行,其中文本列的前四个字符与某个字符串匹配。 (后端数据库是一个有限列类型的sqlite实例,所以请耐心等待)
我为select编写的代码是:
rows = SECtable.query.filter(str(SECtable.date)[:4] == str(matchingString)).all()
我在这里做错了什么?查询永远不会匹配任何行
答案 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)