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 | 電子與通信工程