將csv格式的數據文件導入/導出數據庫+添加新的字段


最近一直忙於實驗室的事情,沒有好好更新博客,在抓包的過程中,遇到了很多問題。

因為我常用Wireshark將抓包信息導出為csv文件,這里簡單mark一下將csv文件導入/導出到數據庫的2種方法:

一.簡單,但是稍慢的方法,使用Navicat for MySQL,傻瓜式導入數據庫:

流程如下:

安裝完成並配置好連接后界面如下:

 

新建數據庫

 

進入導入向導

選擇導入類型:

然后選擇文件作為數據源,這里是我之前抓好的包,300w+條抓包記錄

 

這里直接采取默認設置

 

同樣默認

 

自己設置了下表明,新建了表

 

這里是程序根據文件內容進行的猜測,注意要修改下數據類型,並根據需要做相應調整,這里有點不太好,目前只找到了通過方向鍵“下”來添加,沒有其他操作,如果增加的數據記錄沒有填寫,則自動刪除。

 

我將包的信息縮減到只用我需要的,這樣抓取的信息就從1G銳減到200+M

 半小時,300w+個記錄

這慢的,誰用誰知道~~~~

 

二.使用SQL語句導入csv為表,速度快!

使用SQL語句可以快速實現大量數據導入數據庫的效果。示例如下:

# Windows 中
load data infile '..\\uploads\\test.csv'
into table sampleTableName
fields terminated by ','  optionally enclosed by '"' escaped by ','   
lines terminated by '\r\n' ignore 1 lines;

# Linux 中
load data infile '..\\uploads\\test.csv'
into table sampleTableName
fields terminated by ','  optionally enclosed by '"' escaped by ','   
lines terminated by '\n' ignore 1 lines;

  

解釋:

  1. load data infile + 文件路徑:這里使用了相對路徑,我的機子上安裝的MySQL在'C:\ProgramData\MySQL\MySQL Server 5.7'中,一般情況下,csv文件中第一行一般是每列屬性的名稱,因此在導入數據庫時應省略第一行
  2. 句子中sampleTableName應替換為對應的表的名稱
  3. csv文件中,域一般用逗號分隔,域的字段值一般用一對雙引號包裹,換行一般用‘\r\n’(windows下),因此我發現一般escaped by+逗號與lines terminated by+'\r\n'有對應關系,如果用escaped by """,即引號分隔,則只有將lines terminated by改成'\n'才能導入,並且此時不能ignore 1 lines;

 

常見錯誤:

Error Code 1290:

我機子上安裝的是MySQL5.7,

MySQL5.7默認運行的狀態是:

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

 這是因為需要導入的文件不再MySQL認為的安全文件夾內,因此MySQL拒絕了導入操作。

使用如下語句可看到MySQL當前認為的安全文件夾,將文件放入文件夾內即可

SHOW VARIABLES LIKE 'secure_file_priv';

  

三、使用SQL語句將數據庫表導出為csv文件

 

 鑒於Navicat比較容易上手,所以這里只介紹一下如何用SQL語句將數據庫表導出為csv文件:

用select語句選擇需要導出的字段、表,說明其他附加條件(例如用where子句,還可以進行排序),然后說明導出文件的路徑和文件名,注意,如果是MySQL是在 secure-file-priv 選項下運行,則必須將路徑調整為上文說過的

secure-file-priv路徑,如果不知道,就用show variables like查看,否則報錯Error 1209

當然,這樣導出要求導出的文件不存在,否則報錯 Error 1086

 

示例如下:

select * from newdb2.dataset where vendor = 'xiaomi' order by time 
into outfile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\test.csv'
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r\n';

 此示例用到了where 子句和order by 排序,應該夠用了

那就這樣~see you~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM