收藏!用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 還有很多好用的功能,本文不再介紹,感興趣的朋友可以研究一下。
本文完,謝謝閱讀!
以下文章來源於智慧演示,作者老牛思勉