摘要/ TLDR:
我如何安全地(沒有sql 注入空間)轉換 sql 占位符?就像 make SELECT * FROM $1go from SELECT * FROM ?(正則運算式替換適用于模式\$\d{1,},但它有非常明顯的缺陷,比如捕獲用引號括起來的文字值)反之亦然,從SELECT * FROM ?到到SELECT * FROM $1
我正在嘗試做的事情:
我有一個緩慢的 IO 系結 postgres 連接,它很慢并且想要一個快取系統,我希望這個快取接受 sql 并提供輸出,所以我決定克隆整個遠程資料庫并將其轉換為本地磁盤 bountsqlite3每次我的應用程式啟動時充當“快取”的空間(我預計這會比 redis 更快,因為在本地擁有一些東西往往會更快)
我asyncpg用來與遠程資料庫互動,這個模塊接受$n占位符(其中n表示從 1 開始的占位符的數量)
并使用sqlite3which?用作值的占位符,并希望使用單個查詢并在這兩者之間進行轉換。
如前所述,我嘗試使用正則運算式和字串模板,但它們不夠安全,有沒有辦法內置asyncpg或sqlite3本身這樣做?
uj5u.com熱心網友回復:
SQLite 關于引數的檔案提到了兩個要點:
命名引數也有編號
...
后跟識別符號名稱的美元符號也包含名稱為 $AAAA 的命名引數的位置
換句話說,您可以SELECT * FROM foo WHERE bar = $1在 SQLite 中使用來自 PostgreSQL 的查詢,反之亦然。
這并不是說所有可能的查詢都是可互換的,它們當然不是,但在這種情況下,您可以限制您的查詢以使用$1樣式語法作為引數并未經修改地傳遞它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434094.html
標籤:Python sql python-3.x PostgreSQL sqlite
上一篇:Django-models.ForeignKeyGiving錯誤,提到類未定義
下一篇:正則運算式捕獲Maven測驗輸出
