今天遇到一个问题,sqlite数据库表中一个字段,记录的字符串是带数据库通配符的,例如"%", "_"这种。于是第一步,转译了一波。
for c in "\\~!@#$%^&*()+{}|\"<>?;\',/,":
if c in keyword:
keyword = keyword.replace(c, "\\" + c)
return keyword
想着应该是可以了,但是不出意外,出意外了,转译前%代表通配符可以检索到所有内容,转译后彻底凉了,啥都没了...sql如下
sqlite3 --header --column /var/opt/isa/data/db/test.db "select * from tab WHERE tab.name LIKE '/%'"
面向百度编程了一波得知,得这么写在后面定义声明一个转译符。给like后面拼上。
有了方法开干,但是,我好像tm用的orm...拼个der。
继续面向百度编程,要说还是得官方文档。这个东西解决了问题。
好!直接复制!
filters[k] = keywords_conver(filters[k])
rule.append(col.ilike('%' + filters[k] + '%', escape="\\"))
可以愉快的搜索转译符了