Mysql

從帶有標題的 CSV 文件創建表

  • September 30, 2020

我正在尋找一種僅根據指定 CSV 的內容生成新 MySQL 表的方法。我將使用的 CSV 文件具有以下屬性;

  • “|” 劃定的。
  • 第一行指定列名(標題),也是“|” 劃定的。
  • 列名和順序不固定。
  • 列數不固定。
  • 文件很大(1 百萬行/50 列)。

在 Excel 中,這一切都相當簡單,但在 MySQL 中似乎並非如此(Google 運氣不佳)。關於我應該看什麼的任何建議?

您可以使用csvsql,它是csvkit(一套用於轉換和處理 CSV 文件的實用程序)的一部分:

  • Linux 或 Mac OS X
  • 免費和開源
  • sudo pip install csvkit
  • 例子: csvsql --dialect mysql --snifflimit 100000 datatwithheaders.csv > mytabledef.sql
  • CREATE TABLE它根據文件內容創建一個語句。列名取自 CSV 文件的第一行。

要使用ivansabik答案進行擴展pandas,請參閱如何通過 mysqldb 將 pandas 數據幀插入數據庫?.

如果您可以使用 Python,Pandas 對我來說效果很好(csvsql 永遠掛起,並且比您的情況更少列和行)。就像是:

from sqlalchemy import create_engine
import pandas as pd

df = pd.read_csv('/PATH/TO/FILE.csv', sep='|')
# Optional, set your indexes to get Primary Keys
df = df.set_index(['COL A', 'COL B'])

engine = create_engine('mysql://user:pass@host/db', echo=False)

df.to_sql(table_name, engine, index=False)

引用自:https://dba.stackexchange.com/questions/91966