[英]How to search for a character string that is an escape sequence with re.search
[英]How to escape colon character in search string?
我有以下查詢,只要搜索查詢中沒有冒號:
字符,它就可以完美運行。
search_query = "http:"
with Session() as session:
search_query_stmt = text(
"""
SELECT count(rowid) as count
FROM post_fts
WHERE post_fts=:search_string
"""
)
count = session.execute(
search_query_stmt, {"search_string": search_query}
).scalar_one()
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: http
[SQL:
SELECT count(rowid) as count
FROM post_fts
WHERE post_fts=?
]
[parameters: ('http:',)]
我根據SQLAlchemy 文檔嘗試了以下操作
search_query = "http:"
search_query = search_query.replace(':', r'\:')
這給出了以下錯誤
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) fts5: syntax error near "\"
[SQL:
SELECT count(rowid) as count
FROM post_fts
WHERE post_fts match ?;
]
[parameters: ('http\\:',)]
在我收到另一個字符(連字符-
)的錯誤后得到了解決方案。 問題是我沒有查詢任何普通表或視圖。 我正在查詢 SQLite FTS5 索引。
搜索是否有人使用 FTS5 索引遇到類似錯誤,讓我想到了這個問題。
您不能簡單地將任何隨機字符串與 FTS 一起使用
再次閱讀SQLite FTS5 Docs發現了這個:
在 FTS 表達式中,可以通過以下兩種方式之一指定字符串:
通過將其括在雙引號 (") 中。在字符串中,任何嵌入的雙引號字符都可以通過添加第二個雙引號字符進行 SQL 樣式的轉義。
...
我目前的工作解決方案是這樣的:
search_query = '"' + search_query.replace('"', '""') + '"'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.