簡體   English   中英

如何轉義搜索字符串中的冒號字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM