【爬蟲】(六)Python數(shù)據(jù)存儲之MySQL(上)

date: 2017-02-21 10:48:05

PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務(wù)器的一個庫,Python2中則使用mysqldb。
PyMySQL 遵循 Python 數(shù)據(jù)庫 API v2.0 規(guī)范,并包含了 pure-Python MySQL 客戶端庫。

PyMySQL 安裝

在使用 PyMySQL 之前,我們需要確保 PyMySQL 已安裝。
PyMySQL 下載地址:https://github.com/PyMySQL/PyMySQL。
如果還未安裝,我們可以使用以下命令安裝最新版的 PyMySQL:

pip install PyMySQL  

強烈建議使用pip,實在是神器。
雖說Python安裝第三方庫全是看運氣,但是自從上手Python3,一直pip從未出錯。

之前講的是講教務(wù)處的數(shù)據(jù)爬下來存儲CSV格式的,現(xiàn)將CSV文件導入MySQL。

用MySQL創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)庫表

不會就去學,才是最實用的學習方法。

本科階段學過一門數(shù)據(jù)庫的課,SQL,但是早都忘完了。但是概念還是,上手還是很容易的,

1、使用SHOW語句找出在服務(wù)器上當前存在什么數(shù)據(jù)庫:SHOW DATABASES;


    mysql> SHOW DATABASES;
    +--------------------+
    | Database   |
    +--------------------+
    | information_schema |
    | mysql  |
    | performance_schema |
    | sys|
    +--------------------+
    4 rows in set (0.03 sec)   

2、創(chuàng)建一個數(shù)據(jù)庫abccs: CREATE DATABASE test12;

mysql> CREATE DATABASE test12; 

注意不同操作系統(tǒng)對大小寫的敏感。

3、選擇你所創(chuàng)建的數(shù)據(jù)庫:USE test12

mysql> USE test12 
Database changed 

此時你已經(jīng)進入你剛才所建立的數(shù)據(jù)庫test12.

4、 創(chuàng)建一個數(shù)據(jù)庫表:CREATE TABLE student ();
首先看現(xiàn)在你的數(shù)據(jù)庫中存在什么表:

mysql> SHOW TABLES; 
Empty set (0.00 sec) 

說明剛才建立的數(shù)據(jù)庫中還沒有數(shù)據(jù)庫表。下面來創(chuàng)建一個數(shù)據(jù)庫表student:

我們要建立一個學生信息的便,表的內(nèi)容包含學生:學號、姓名、培養(yǎng)單位、入學年月、專業(yè)、導師。

mysql> CREATE TABLE student (id INT,name VARCHAR(20),academy VARCHAR(20),enrollm
entdate DATE,major VARCHAR(20),advisor VARCHAR(20));

由于name等列值是變化的,因此選擇VARCHAR,其長度不一定是20。可以選擇從1到255的任何長度,如果以后需要改變它的字長,可以使用ALTER TABLE語句。入學日期列則使用DATE數(shù)據(jù)類型。
創(chuàng)建了一個表后,我們可以看看剛才做的結(jié)果,用SHOW TABLES顯示數(shù)據(jù)庫中有哪些表:

mysql> SHOW TABLES;
+------------------+
| Tables_in_test12 |
+------------------+
| student  |
+------------------+
1 row in set (0.00 sec)

5、顯示表的結(jié)構(gòu): DESCRIBE mytable;

mysql> DESCRIBE student;
+----------------+-------------+------+-----+---------+-------+
| Field  | Type| Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| id | int(11) | YES  | | NULL|   |
| name   | varchar(20) | YES  | | NULL|   |
| academy| varchar(20) | YES  | | NULL|   |
| enrollmentdate | date| YES  | | NULL|   |
| major  | varchar(20) | YES  | | NULL|   |
| advisor| varchar(20) | YES  | | NULL|   |
+----------------+-------------+------+-----+---------+-------+
6 rows in set (0.02 sec)

6、 往表中加入記錄

我們先用SELECT命令來查看表中的數(shù)據(jù):
mysql> select * from student;
Empty set (0.00 sec)
這說明剛才創(chuàng)建的表還沒有記錄。

一般情況下加入一條新記錄:

mysql> insert into mytable 
-> values (′aabb′,′cc′,′xxxx-xx-xx′,′dddd′); 
Query OK, 1 row affected (0.05 sec)

再用上面的SELECT命令看看發(fā)生了什么變化。我們可以按此方法一條一條地將的記錄加入到表中。

再使用如下命令看看是否已將數(shù)據(jù)輸入到數(shù)據(jù)庫表中:

mysql> select * from mytable;  

CSVToMySQL

我們要用Python把CSV文件存入MySQL。

對爬取下來的CSV文件做處理:


    csvFile = open('./student.csv', 'w',encoding = 'utf-8')
    writer = csv.writer(csvFile)
    writer.writerow(('姓名','學號','培養(yǎng)單位','入學年月','錄取方式' ,'專業(yè)','研究方向','導師','已完成總學分','學位課加權(quán)平均分'))
    csvRow = []
    
    try:
        for row in rows:
            for cell in row.findAll('td'):
                csvRow.append(cell.get_text().strip())
    
        writer.writerow(csvRow)
    
    
    finally:
    csvFile.close()  


CSV存為MySQL


    def saveMysql(self):
        csvFile1 = open('./student.csv', 'r', encoding='utf-8')
        reader = csv.DictReader(csvFile1)

        for e in reader:
            #連接到數(shù)據(jù)庫
            connection = pymysql.connect(host='127.0.0.1', user='root', password='root', db='test12', charset='utf8',
                                         cursorclass=pymysql.cursors.DictCursor)
            # 執(zhí)行sql語句
            try:
                with connection.cursor() as cursor:
                    sql = "insert into `student`(`id`,`name`,`academy`,`enrollmentdate`,`major`,`advisor`)values(%s,%s,%s,%s,%s,%s)"
                    # 使用 execute()  方法執(zhí)行 SQL 查詢 
                    cursor.execute(sql, (
                    e['學號'].strip(), e['姓名'].strip(),e['培養(yǎng)單位'].strip(), e['入學年月'].strip(), e['專業(yè)'].strip(), e['導師'].strip(), ))

                    connection.commit()
            finally:

                connection.close()    

結(jié)果:

mysql> select * from student;
+------------+--------+--------------------+----------------+-------------------
----+---------------------------------------+
| id | name   | academy| enrollmentdate | major
| advisor   |
+------------+--------+--------------------+----------------+-------------------
----+---------------------------------------+
| 1601120338 | 肖灑   | 通信工程學院   | 2016-08-30 | 電子與通信工程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容