」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用序列與字串時如何解決 SQLite 中的參數替換問題?

使用序列與字串時如何解決 SQLite 中的參數替換問題?

發佈於2024-11-08
瀏覽:713

How to Resolve Parameter Substitution Issues in SQLite When Using Sequences vs. Strings?

對 SQLite 中的參數替換問題進行故障排除

在 Python 中使用 SQLite3 中的參數替換時遇到問題嗎?這裡有一個深入的調查和解決方案。

為了防止SQL注入,使用'?'進行參數替換是可取的。然而,使用這種方法時可能會出現錯誤。例如,使用以下程式碼:

for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", item)
    self.cursor.close()

出現錯誤“sqlite3.ProgrammingError:提供的綁定數不正確”,表示該語句指定了一個綁定,而提供了八個。此問題源自於資料庫表的初始建立。負責資料庫創建的模組包含八個綁定,導致不匹配。

cursor.execute("""CREATE TABLE Equipment 
    (id INTEGER PRIMARY KEY, 
    name TEXT,
    price INTEGER, 
    weight REAL, 
    info TEXT, 
    ammo_cap INTEGER, 
    availability_west TEXT,
    availability_east TEXT)""")

諷刺的是,替換為'?'使用不太安全的'%s' 可以解決問題:

for item in self.inventory_names:
    self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item)
    self.cursor.close()

這個悖論背後的原因在於 Cursor.execute() 接受第二個參數的方式。它需要一個序列,而不是單一字串,但您傳遞的是長度為 8 的字串。

要修正此問題,請將程式碼調整為以下內容:

self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])

此修改可確保參數替換如預期運作。始終確保傳遞給 Cursor.execute() 的第二個參數對應於 SQL 語句中指定的綁定數量。

版本聲明 本文轉載於:1729322897如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Nginx 在 https 埠上強制 http 轉為 https
    Nginx 在 https 埠上強制 http 轉為 https
    範例腳本 nginx : server { listen 443 default ssl; listen [::]:443 ssl; root /var/www/html/api_mobile/public; include snip...
    程式設計 發佈於2024-11-09
  • 解決 PHP 中的命名空間問題:為什麼找不到類別?
    解決 PHP 中的命名空間問題:為什麼找不到類別?
    解決 PHP 自動載入的命名空間問題在 PHP 中使用命名空間和自動載入機制時,經常會遇到無法找到所需類別的錯誤。讓我們探討一下這個錯誤背後的原因並提供解決方案。 如提供的程式碼片段所示,出現錯誤「Class 'Class1' not found」是因為 Class1 類別未在全域範...
    程式設計 發佈於2024-11-09
  • 如何輕鬆將 JavaScript 陣列轉換為逗號分隔清單?
    如何輕鬆將 JavaScript 陣列轉換為逗號分隔清單?
    提升JavaScript:輕鬆將陣列轉換為逗號分隔清單在JavaScript 中處理陣列時,將它們轉換為可讀格式像逗號分隔的清單通常是常見任務。有一個巧妙的方法可以輕鬆實現此目的,而不是訴諸手動字串連接。 Array.prototype.join() 方法介紹陣列。 prototype.join()...
    程式設計 發佈於2024-11-09
  • Java Sound 可以播放 MP3 檔案嗎?
    Java Sound 可以播放 MP3 檔案嗎?
    Java Sound 預設不支援 MP3。對於特定 JRE 中支援的類型,請檢查 AudioSystem.getAudioFileTypes()。 有一種方法可以加入 MP3 支援。將基於 JMF 的 mp3plugin.jar 加入到專案的執行時間類別路徑中。 雖然 javax.sound.sam...
    程式設計 發佈於2024-11-09
  • 如何在 Socket.IO 中阻止發送方接收回應?
    如何在 Socket.IO 中阻止發送方接收回應?
    如何在 Socket.IO 中向發送者以外的所有客戶端發送回應? Socket.IO 提供了一系列的通訊方法用戶端和伺服器。要將訊息傳送到所有客戶端,可以使用 io.sockets.emit('response', data);。但是,當您需要排除發送客戶端接收回應時,這種方法就不夠...
    程式設計 發佈於2024-11-09
  • 如何在 Go 中使用即時請求測試 HTTP 伺服器?
    如何在 Go 中使用即時請求測試 HTTP 伺服器?
    在Go 中使用即時請求測試HTTP 伺服器獨立的單元測試處理程序至關重要,但可能忽略路由和其他中間件的影響。對於全面的測試,請考慮使用“實時伺服器”方法。 使用 httptest.Server 進行即時伺服器測試net/http/httptest.Server 類型有助於即時伺服器測試。它使用提供的...
    程式設計 發佈於2024-11-09
  • 如何在添加數據時自動滾動 Div 到末尾?
    如何在添加數據時自動滾動 Div 到末尾?
    如何在新增資料時自動捲動至Div 的結尾處理動態Web 內容時,通常希望讓div 等元素自動捲動到新增資料時的底部。這是聊天視窗或無限滾動資料表等元素的常見要求。 考慮這樣一個場景:您有一個表格包含在固定高度的 div 中,並且您希望它自動滾動到末尾當添加新資料時。本文探討了實作此行為的 JavaS...
    程式設計 發佈於2024-11-09
  • 如何使用 Laravel Eloquent 取得每個賣家的最新快照?
    如何使用 Laravel Eloquent 取得每個賣家的最新快照?
    用於選擇按賣家分組的最新行的雄辯查詢給定一個包含賣家相關資訊(包括created_at時間戳)的表,通常需要僅檢索每個賣家的最新條目。使用 Laravel Eloquent 可以有效地完成此任務。 為了實現這一目標,我們可以使用 MySQL 子查詢,該子查詢使用左連接和 NULL 匹配來標識每個 s...
    程式設計 發佈於2024-11-09
  • 如何去掉 Go 時間戳記中的「m」字尾?
    如何去掉 Go 時間戳記中的「m」字尾?
    如何在Go 時間戳中排除“m”指示符在Go 中,time.Now() 函數返回一個帶有尾隨“m”後綴表示單調時鐘讀數。對於不需要的特定用例,可以刪除此後綴。 「m」的意思「m」字尾表示掛鐘之間的距離和單調時鐘讀數,以十進位秒錶示。調整掛鐘以保持與外部來源的精確計時,同時單調時鐘穩定遞增而不中斷。 刪...
    程式設計 發佈於2024-11-09
  • 如何安裝和使用Django
    如何安裝和使用Django
    姜戈 Django 是免費開源用Python編寫的網路架構。它遵循模型-模板-視圖架構模式,並由Django 軟體基金會維護。它於 2005 年 7 月 21 日首次發布,並根據 3 條款 BSD 許可證獲得許可。 Django 以其快速開發和乾淨、務實的設計而聞名,使其成為建立 ...
    程式設計 發佈於2024-11-09
  • 有趣的彩色 Codepen
    有趣的彩色 Codepen
    嗨,身為設計師,色彩對我來說真的很重要。 在過去的兩年裡,我收集並創建了一些調色板。但這不是今天貼文的主題。 今天我想分享一些我製作的有趣的彩色筆。 我們走吧… (注意:其中一些可能在行動裝置上不相容。) 1. RGB 顏色滑桿 對此我能說什麼。首先,在我們進一步討論之前,我應...
    程式設計 發佈於2024-11-09
  • 為什麼我無法更改 IE8 中禁用的 HTML 控制項的文字顏色?
    為什麼我無法更改 IE8 中禁用的 HTML 控制項的文字顏色?
    IE8 中禁用的HTML 控制項的CSS 顏色變更問題在HTML 中,disabled 屬性停用輸入控制項,但它也會影響控制項這些控制項的外觀。大多數瀏覽器都支援使用 CSS 套用於停用控制項的自訂樣式。然而,Internet Explorer 8 (IE8) 在更改停用控制項的顏色方面提出了獨特的...
    程式設計 發佈於2024-11-09
  • React 中的純元件:釋放效能
    React 中的純元件:釋放效能
    在现代 React 开发中,性能通常是一个关键焦点,尤其是当应用程序变得越来越复杂时。优化性能最有效的方法之一是利用 React 中的纯组件。 Pure Components 提供强大的优化技术,减少不必要的重新渲染,并确保您的应用程序运行得更快、更流畅。在这篇博客中,我们将深入探讨纯组件是什么、何...
    程式設計 發佈於2024-11-09
  • 引用計數與追蹤垃圾收集
    引用計數與追蹤垃圾收集
    你好,Mentes Tech! 您知道記憶體釋放上下文中的引用計數和引用追蹤是什麼嗎? 引用追蹤(或追蹤垃圾收集)和引用計數(引用計數)之間的區別在於每種技術用於識別和釋放不存在的物件記憶體的方法。使用時間更長。 我將解釋每一個,然後強調主要差異。 引用計數(引用計數) 工作...
    程式設計 發佈於2024-11-09
  • 如何選擇正確的 C++11 初始化語法以及何時使用它們?
    如何選擇正確的 C++11 初始化語法以及何時使用它們?
    C 11 中初始化器語法的困境隨著C 11 的引入,開發人員獲得了一組用於初始化類別的新語法選項,添加到現有的語法選項中大括號括起來的初始值設定項。過多的選擇提出了一個令人費解的兩難:何時使用每個語法選項? 預設複製初始化提供的指南表明,如果意圖是為物件分配精確的值,複製初始化(=)應該受到青睞。這...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3