收藏!用Python一鍵批次將任意結構的CSV檔案匯入SQLite資料庫。
上週,推送了一篇:
“ 收藏!用Python一鍵批次將任意結構的CSV檔案匯入MySQL資料庫。”
本文是上篇的姊妹篇,只不過是把資料庫換成了 Python 自帶的SQLite3。
使用 SQLite3 的優勢還是很明顯的,它是一種嵌入式資料庫,只是一個
。db
格式的檔案,無需安裝、配置和啟動,移植性非常好。是輕量級資料的不二之選!推薦看一下我寫的入門文章:
“ 收藏!Python內建的輕量級資料庫竟如此好用!全網最實用sqlite3實戰專案。”
上一篇介紹的是一鍵批次匯入 MySQL 資料庫,這一篇介紹的是一鍵批次匯入 SQLite3 資料庫,兩者程式碼 90% 相同。所以本文重點介紹不同之處。
先看一下程式執行效果:
兩篇文章使用的資料來源是一模一樣的。經本人親測,匯入到 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
中,可以很方便的檢視到資料庫中有哪些表,以及表結構和資料。見下圖:
我們也可以開啟一個
SQL編輯器
,輸入 SQL 命令,執行你想要的操作。見下圖:
SQLiteStudio
還有很多好用的功能,本文不再介紹,感興趣的朋友可以研究一下。
本文完,謝謝閱讀!
★ 本文
原始碼
、
資料來源
、
SQLiteStudio軟體
已上傳,智慧演示微信公眾號後臺回覆
csv2sqlite
即可獲取下載連結。
”
不知道大家對SQLite資料庫是否感興趣呢,歡迎在下方留言。
猜你喜歡:
7步完成MySQL配置,極簡教程,還不來試試?
我用 Python 處理3萬多條資料,只要幾秒鐘……
讓你的程式學會自己戴'口罩'!讓你的程式更聰明?
收藏!用Python一鍵批次將任意結構的CSV檔案匯入MySQL資料庫。