簡體   English   中英

使用Python將未知列的CSV導入PostgreSQL

[英]Import CSV with unknown columns to PostgreSQL using Python

我正在嘗試將包含74列的CSV文件導入到PostgreSQL表中。我試圖通過PostgreSQL完成該操作,但無法執行該操作,下面是該帖子,從這篇帖子中得知我需要一個客戶端編程語言來完成此任務,因此請考慮通過python進行此操作,因為我們的項目將python用於其他后端操作。

我是python的新手,但是我進行了很多搜索,但是在我發現的每個示例中,表列名稱都是預定義的,在我的情況下,由於CSV包含74列,因此無法通過對每個列進行硬編碼來創建表。

因此任何人都可以為此建議或推薦通用解決方案,這將有很大的幫助。

無法將CSV文件從本地計算機復制到遠程服務器

根據這是用於生產還是只是臨時使用,您需要

  1. 找出CSV中有多少列
  2. 確定數據類型,因為CSV沒有數據類型,這意味着您將需要單獨檢查列以確定適合您的標准的文本。 (或者,如果數據以Excel格式提供,則可以使用openpyxl庫讀取它,它將為您提供一些數據類型信息)。
  3. 如果您實際上想要一個具有可變列數的表,則需要執行一個CREATE TABLE查詢。 根據最終將要對應用程序中的數據進行處理的情況,使用列號位於字段中的通用結構可能會更好。 讓我解釋一下。

說您的CSV是這樣的

'Hdg 1', 'Hdg 2', 'Hdg 3', 'Hdg 4', 'Hdg 5'
'Some text', 23, 47, 'More text', 'Even more text', 21
'A string', 66, 22, 'Another string', 'Last string', 42

對於第1步,對列進行計數應該很簡單,建議使用的csv閱讀器軟件包會有所幫助。

要滿足2,您需要確定哪些是字符串(也許是用引號引起來的,也許因為是全數字,也許可以從標題中確定等等)。

對於#3,我們假設我們使用一個表存儲數據(而不是為每個新導入創建自定義表,除非出於某些原因絕對必要,否則我應該避免使用該表)。

如果我們獲取第一個數據行並分別從第1、4和5列提取文本[ Some textMore textEven more text ],則可以使用列號,標題或列表中位置中的任何一個文本字符串(0、1和2)來標識原始列。 如果使用單個表,則可能還需要標識數據的來源,例如,如果數據來自“ employees.csv”,則將使用“ employees”作為標識符。 因此,CSV文件的每一行將導致在新表中INSERT 3行。 我不會顯示主鍵,但也應該有一個。

'employees', 'Hdg 1', 'Some text'
'employees', 'Hdg 2', 'More text'
'employees', 'Hdg 3', 'Even more text'

要么

'employees', 0, 'Some text'
'employees', 1, 'More text'
'employees', 2, 'Even more text'

您也可以將第一列放在列出所有數據源的相關表中。 這些都是您需要根據要訪問數據的方式,數據量等進行的所有設計決策。

如果您需要以表格格式顯示數據,則可以編寫一個視圖,該視圖使用RDBMS的數據透視查詢以這種方式檢索數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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