2015-11-10 73 views
5

我正在使用python和sql數據庫進行第一步操作,但仍不確定要使用哪個軟件包以及如何使用。我有一個約30萬字典的列表,每個約有20個鍵。這些字符必須插入到SQL表中。使用python插入詞典列表到SQL表中

在我看來,字典方法列表的優點是,我明確地命名了我想輸入特定值的列。 (這可能是,這不是一個好辦法)

讓我提出一個更具體的例子,捕捉我的問題的要點。 該表由三列組成:ID(整數),價格(小數),類型(字符串)。 類型支持空值。

我的字典的按鍵具有相同的名稱和類型的字典的名單可能是這樣的:

lst = [{'ID':1, 'Price': '9.95', 'Type': None}, 
     {'ID':2, 'Price': '7.95', 'Type': 'Sports'}, 
     {'ID':3, 'Price': '4.95', 'Type': 'Tools'}, ...] 

所以出現的問題有以下幾點:

  1. 是使用類型的字典的方法正確的? (請注意,我有20列)
  2. 如果是/否:如何有效地執行這樣的查詢?
  3. 是否有必要在價格轉換爲十進制和之前的SQL語句,或才能實現這一目標「上的即時」
  4. 將自動轉換爲空的無值,或者是有需要做額外的工作?
+0

是你的工作是什麼樣的項目呢?如果您使用的是Python和數據庫,那麼實現像Django這樣的MVC可能會有所幫助。 https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller https://www.djangoproject.com/ –

+0

我從一個webscraping服務(幾個json文件)中提取數據,並需要提取信息,我插入到MSSQL服務器 – Quickbeam2k1

+0

我假設這是一次性,那麼實施整個框架不是一個有用的建議。你正在使用哪種SQL?許多DB支持各種格式的批量插入(這意味着將您的webscraped數據寫入文件可能更有用)。例如。 https://msdn.microsoft.com/en-CA/library/ms188609.aspx(編輯錯誤的鏈接) –

回答

3

假設您使用Python Database API specification兼容的數據庫驅動程序。

類型轉換(問題3和4)應由數據庫驅動程序立即處理。

對於2),有executemany()

cursor.executemany(""" 
    INSERT INTO 
     mytable 
     (id, price, type) 
    VALUES 
     (%(id)s, %(price)s, %(type)s) 
""", lst) 
+0

因此,在您的解決方案中,您不會使用字典列表,而是使用元組列表。因此你需要維護每個元組的順序,對吧? – Quickbeam2k1

+1

@ Quickbeam2k1 nono,我離開'lst'基本上就是 - 字典列表 - 您只需要注意查詢內的佔位符對應於字典中的鍵。 – alecxe

+0

嗯,這樣的字典不是命令不是一個問題在這裏? (即%(id)是指字典中的ID鍵,等等?這個語句是否也是一個準備好的語句?就我所知,在這種情況下,需要指定?作爲佔位符。由於查詢太多,準備好的陳述肯定是首選 – Quickbeam2k1