收藏!用Python一鍵批量將任意結構的CSV文件導入 SQLite 資料庫。

  • 2020 年 2 月 20 日
  • 筆記

作者:牛思勉

來源:智慧演示

上周,推送了一篇:「 收藏!用Python一鍵批量將任意結構的CSV文件導入MySQL資料庫。」 本文是上篇的姊妹篇,只不過是把資料庫換成了 Python 自帶的SQLite3。

使用 SQLite3 的優勢還是很明顯的,它是一種嵌入式資料庫,只是一個.db格式的文件,無需安裝、配置和啟動,移植性非常好。是輕量級數據的不二之選!推薦看一下我寫的入門文章:「 收藏!Python內置的輕量級資料庫竟如此好用!全網最實用sqlite3實戰項目。」

上一篇介紹的是一鍵批量導入 MySQL 資料庫,這一篇介紹的是一鍵批量導入 SQLite3 資料庫,兩者程式碼 90% 相同。所以本文重點介紹不同之處。

先看一下程式運行效果:

程式運行動圖演示.gif

兩篇文章使用的數據源是一模一樣的。經本人親測,導入到 SQLite3 的速度要比導入到 Mysql 快的多。這也進一步驗證了,處理輕量級數據,SQLite 要便捷、快速的多。

下面我們就來看看兩者程式碼的主要不同吧:

1. 資料庫連接方式不同

try:      conn = conn = sqlite3.connect(path+'csv.db')      cur = conn.cursor()      print('資料庫連接成功!')      print(' ')  except:      print('資料庫連接失敗!')  

SQLite3 資料庫的連接方式更簡單,直接指明路徑即可。

2. 程式碼優化,提高通用性

2.1 優化了資料庫表名稱

for file in files:      if file.split('.')[-1] in ['csv']:          i += 1          filename = '`' + 'tab_' + file.split('.')[0].replace('-', '_').replace(' ', '_').replace(':','') + '`'  

通過遍歷每一個 CSV 文件的名稱,計算出一個資料庫表名稱,確保計算出的表名稱符合資料庫規則:

filename = '`' + 'tab_' + file.split('.')[0].replace('-', '_').replace(' ', '_').replace(':','') + '`'

首先,在資料庫表名稱前加上 tab_ ,避免純數字作為表名稱時程式報錯;其次,替換了 -:空格;最後,在資料庫表名稱前後加上一對反引號。

2.2 優化了資料庫表欄位名稱

types = f.ftypes          field = [] #用來接收欄位名稱的列表          table = [] #用來接收欄位名稱和欄位類型的列表          for item in columns:              item1 = '`'+item.replace('-', '_').replace(' ', '_').replace(':','')+'`'              if 'int' in types[item]:                  char = item1 + ' INT'              elif 'float' in types[item]:                  char = item1 +' FLOAT'              elif 'object' in types[item]:                  char = item1 +' VARCHAR(255)'              elif 'datetime' in types[item]:                  char = item1 + ' DATETIME'              else:                  char = item1 + ' VARCHAR(255)'              table.append(char)              field.append(item)            tables = ','.join(table)          #print(tables)          fields = ','.join(field)          #print(fields)  

和資料庫表名稱優化一樣,替換了 -:空格等特殊符號,並在每一個欄位名稱前後加上一對反引號。

3. SQL 語句不同

3.1 創建自增主鍵語句不同

創建 MySQL 資料庫自增主鍵的語句是:id0 int PRIMARY KEY NOT NULL auto_increment;創建 SQLite 資料庫自增主鍵的語句是:id0 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL

兩者略有不同,SQLite 是用 AUTOINCREMENT 創建自增主鍵。

3.2 插入數據的語句不同

values = f.values.tolist()  s = ','.join(['?' for _ in range(len(f.columns))])  insert_sql = 'insert into {}({}) values({})'.format(filename,fields,s)  cur.executemany(insert_sql, values)  conn.commit()  

主要區別是:SQLite 使用 ? 來佔位。

以上就是一鍵批量將任意結構的CSV文件導入SQLite資料庫與MySQL資料庫程式碼的主要不同點。如果您還沒有看過上一篇文章,強烈建議去看一下!上篇文章程式碼實現思路方面講解的更詳細:「 收藏!用Python一鍵批量將任意結構的CSV文件導入MySQL資料庫。」

下面給大家介紹一款 SQLite 數據可視化工具:

SQLiteStudio 是一款綠色小巧的 SQLite 資料庫可視化工具,功能強大,操作簡單。

我們可以將上文自動導入生成的資料庫 csv.db 添加到 SQLiteStudio 中,可以很方便的查看到資料庫中有哪些表,以及表結構和數據。見下圖:

添加資料庫動圖演示.gif

我們也可以打開一個 SQL編輯器,輸入 SQL 命令,執行你想要的操作。見下圖:

查詢動圖演示.gif

SQLiteStudio 還有很多好用的功能,本文不再介紹,感興趣的朋友可以研究一下。

本文完,謝謝閱讀!

以下文章來源於智慧演示,作者老牛思勉