Gar*_*ber 72 python sqlalchemy
我正在使用这里描述的MySQLicious类型模式来建立一个简单的标记系统.我已经在4个不同的SO线程中阅读了一些标记模式的替代实现,这最适合我的需求.
条目集合有标签"apple banana orange"和"strawberry banana lemon",我正在尝试找到Elixir/SQLAlchemy等效语句
SELECT * FROM table WHERE tags LIKE "%banana%";
Run Code Online (Sandbox Code Playgroud)
我无法找到任何这样的方法来构造Class.query.filter/filter_by()命令,并且无法在文档中看到任何模块的类似方法.有一个简单的方法吗?或者我应该只使用原始SQL.
额外问题:MySQLicious架构的一个缺点是我可能希望搜索"%apple%"但返回"菠萝".是否有高级方法来处理此测试用例?或者我应该在每个查询中包含一个前导空格?
nB:对于那些关心的人来说,这是我对数据库的第一次体验,所以我可能会忽略其他线程中提到的模式的核心优势.我的应用程序用于记录一个或两个关于已完成任务的句子,列[TaskID,Tags,Notes,StartTime,StopTime,TimeTaken],有点像简单的日记.主要用于教程目的.我希望能够通过单个标签进行搜索,以便大致了解我在给定任务上花费的时间.
Dan*_*uev 137
每列都有.like方法,可以用作过滤子句.
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
Run Code Online (Sandbox Code Playgroud)
小智 15
如果您想要不区分大小写的 like 子句实现:
session.query(TableName).filter(TableName.colName.ilike(f'%{search_text}%')).all()
Run Code Online (Sandbox Code Playgroud)
除了上面的答案,无论谁寻找解决方案,你也可以尝试'匹配'运算符而不是'喜欢'.不想有偏见但在Postgresql中它对我来说非常有用.
Note.query.filter(Note.message.match("%somestr%")).all()
Run Code Online (Sandbox Code Playgroud)
它继承了CONTAINS和MATCH等数据库功能.但是,它在SQLite中不可用.
有关更多信息,请参阅Common Filter Operators
试试这段代码
output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66528 次 |
| 最近记录: |