python開發11之PyMySQL模塊

1.PyMySQL安裝
1.1通過pypi安裝PyMySQL模塊
• pypi即python package index
• 是python語言的軟件倉庫通過pip安裝PyMySQL模塊
• 官方站點爲https://pypi.python.org

方法一:官網下載安裝包,本地安裝
[root@miss  ~]#yum install  -y  gcc     //安裝依賴包
[root@miss  ~]#pip3  install  PyMySQL-0.9.0.tar.gz 

方法二:在線安裝
[root@miss  ~]#pip3  install   pymysql 

方法三:使用國內鏡像站點,爲了實現安裝加速,可以配置pip安裝時採用國內鏡像站點
[root@miss ~]#mkdir    ~/.pip/    
[root@miss ~]#vim  ~/.pip/pip.conf        
[global]    
index-url=http://pypi.douban.com/simple/    
[install]   
trusted-host=pypi.douban.com    

2.PyMySQL應用
2.1 連接數據庫
• 創建連接是訪問數據庫的第一步
conn=pymysql.connect(host=’127.0.0.1’,port=3306,user=’root’,passwd=’123456’, db=’db1’, charset=’utf8’)
2.2 遊標
• 遊標(cursor)就是遊動的標識
• 通俗的說,一條sql取出對應n條結果資源的接口/句柄,就
是遊標,沿着遊標可以一次取出一行
cursor = conn.cursor()
2.3 插入數據
• 對數據庫表做修改操作,必須要commit
sql1 = “insert into departments(dep_name) values(%s)”
result = cur.execute(sql1, (‘development’,))

sql2 = “insert into departments(dep_name) values(%s)”
data = [(‘hr’,), (‘op’,)]
result = cur.executemany(sql2, data)

sql3 = “insert into departments(dep_name) values(%s)”
data = [(‘行政’,), (‘財務’,), (‘運營’,)]
result = cur.executemany(sql3, data)

conn.commit()
2.4查詢數據
• 可以取出表中一條、多條或全部記錄
sql4 = “select * from departments”
cur.execute(sql4)
result = cur.fetchone()
print(result)

result2 = cur.fetchmany(2)
print(result2)

result3 = cur.fetchall()
print(result3)
2.5移動遊標
• 如果希望不是從頭取數據,可以先移動遊標
cur.scroll(1, mode=”rala\ve”)
cur.scroll(2, mode=”absolute”)

sql5 = “select * from departments”
cur.execute(sql5)
cur.scroll(3, mode=’absolute’)
result4 = cur.fetchmany(2)
print(result4)
2.6 修改數據
• 通過update修改某一字段的值
sql6 = “update departments set dep_name=%s where dep_name=%s”
result = cur.execute(sql6, (‘opera\ons’, ‘op’))
print(result)
conn.commit()
2.7 刪除記錄
• 通過delete刪除記錄
sql7 = “delete from departments where dep_id=%s”
result = cur.execute(sql7, (6,))
print(result)
conn.commit()
3.案例
發工資的數據庫
姓名、性別、出生年月、部門、聯繫方式、員工編號、發工資日期、基本工資、獎金、總工資
第一範式(1NF):所有的域都應該是原子性的,即數據庫表的每一列都是不可分割的原子數據項
聯繫方式應該拆分爲:住址、電話號碼、email等
第二範式(2NF):在1NF的基礎上,非碼屬性必須完全依賴於候選碼
把字段放到不同的表裏:
員工表:員工編號、姓名、性別、出生年月、部門ID、電話號碼、email
部門表:部門ID、部門編號
工資表:autoid、員工編號、發工資日期、基本工資、獎金、總工資
第三範式(3NF):在2NF基礎上,任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)
因爲總工資是用基本工資和獎金算出來的,所以它不要出現在數據庫表中

[root@miss  ~]#mysql -uroot -p123456
MariaDB [(none)]> CREATE DATABASE db1 DEFAULT CHARSET='utf8';
MariaDB [(none)]> use db1;
MariaDB [db1]> CREATE TABLE departments
(dep_id INT, dep_name VARCHAR(20), PRIMARY KEY(dep_id));
MariaDB [db1]> CREATE TABLE employees
(emp_id INT, emp_name VARCHAR(20) NOT NULL, gender VARCHAR(6), email VARCHAR(50), dep_id INT, PRIMARY KEY(emp_id), FOREIGN KEY(dep_id) REFERENCES departments(dep_id));
MariaDB [db1]>  CREATE TABLE salary
(auto_id INT AUTO_INCREMENT, date DATE, emp_id INT, basic INT, awards INT, PRIMARY KEY(auto_id), FOREIGN KEY(emp_id) REFERENCES employees(emp_id));
[root@miss  ~]#cat mysql_data.py
import pymysql

conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='db1',charset='utf8')            # 創建到數據庫的連接

cursor = conn.cursor()  # 創建遊標,相當於打開文件返回文件對象
insert_dep1 = 'INSERT INTO departments VALUES(%s, %s)'
# cursor.execute(insert_dep1, ('1', '人事部'))
insert_deps = [(2, '運維部'), (3, '開發部'), (4, '測試部')]
cursor.executemany(insert_dep1, insert_deps)
conn.commit()  # 增刪改都需要commit
cursor.close()
conn.close()
[root@miss  ~]#cat mysql_modify.py
import pymysql

conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='db1',charset='utf8')            # 創建到數據庫的連接

cursor = conn.cursor()  # 創建遊標,相當於打開文件返回文件對象
insert_dep1 = 'UPDATE departments SET dep_name=%s WHERE dep_name=%s'
cursor.execute(insert_dep1, ('人力資源部', '人事部'))
delete1 = 'DELETE FROM departments WHERE dep_name=%s'
cursor.execute(delete1, ('測試部',))
conn.commit()  # 
cursor.close()
conn.close()
[root@miss  ~]#cat mysql_query1.py
import pymysql

conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='db1',charset='utf8')            # 創建到數據庫的連接
cursor = conn.cursor()

query1 = 'SELECT * FROM departments'
cursor.execute(query1)
r1 = cursor.fetchone()
print(r1)
print('#' * 20)
r2 = cursor.fetchmany(2)
print(r2)
print('#' * 20)
r3 = cursor.fetchall()
print(r3)

cursor.close()
conn.close()
[root@miss  ~]#cat mysql_query2.py
import pymysql

conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='123456',db='db1',charset='utf8')            # 創建到數據庫的連接
cursor = conn.cursor()
query1 = 'SELECT * FROM departments'
cursor.execute(query1)
# cursor.scroll(2, mode='absolute')
# r1 = cursor.fetchall()
# print(r1)
cursor.scroll(1, mode='absolute')  # 以開頭爲起始點移動遊標
cursor.fetchone()  # 取出一行
cursor.scroll(1, mode='relative')  # 以當前位置爲參考點移動遊標
r2 = cursor.fetchall()  # 取出後續所有內容
print(r2)

cursor.close()
conn.close(
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章