Elixir / SQLAlchemy等效于SQL“LIKE”语句?
我正在使用这里描述的一个简单的标记系统的MySQLicioustypes的模式。 我已经阅读了4种不同SO线程中标记模式的一些替代实现,这最适合我的需求。
一组条目有“苹果香蕉橙”和“草莓香蕉柠檬”的标签,我试图findElixir / SQLAlchemy等价语句
SELECT * FROM table WHERE tags LIKE "%banana%";
我一直没能find任何这样的方式来构造一个Class.query.filter / filter_by()命令,并且无法在任何模块的文档中看到类似的方法。 有一个简单的方法来做到这一点? 或者我应该只使用原始的SQL。
额外的问题:MySQLicious模式的缺点是我可能希望search“%apple%”但返回“菠萝”。 有一个高层次的方式来处理这个testing用例吗? 还是应该在每个查询中包含一个前导空间?
NB:对于那些关心,这是我第一次使用数据库的经验,所以我可能忽略了其他线程中提到的架构的核心优势。 我的应用程序是logging一个或两个关于已完成的任务,列[TaskID,标签,注释,StartTime,StopTime,TimeTaken],有点像一个简单的日记。 主要是为了教程的目的。 我希望能够通过单独的标签进行search,以大致了解我在特定任务上花费了多less时间。
每列都有.like方法,可以作为filter子句使用。
>>> Note.query.filter(Note.message.like("%somestr%")).all() []
除了上面的答案,无论谁寻找解决scheme,你也可以尝试“匹配”运营商而不是“像”。 不想被偏见,但它在Postgresql中完美的工作。
Note.query.filter(Note.message.match("%somestr%")).all()
它inheritance了CONTAINS和MATCH等数据库函数。 但是,它在SQLite中不可用。
有关更多信息,请参阅常用filter操作符
试试这个代码
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))