Mysql
從帶有標題的 CSV 文件創建表
我正在尋找一種僅根據指定 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)