說明:個(gè)人練手python用瓦胎。
操作系統(tǒng):window10 x64
IDE:Pycharm 2017.2.2
Python版本:3.6.2
一芬萍、PyMySQL的安裝
1、切換到python安裝路徑下的Scripts文件夾下凛捏,比如:
cd c:\Programs\Python\Python36\Scripts
2担忧、輸入以下指令:
pip3.6 install PyMySQL
網(wǎng)上找到的都是pip install PyMySQL,或者pip3 install PyMySQL坯癣,現(xiàn)在3.6版本了瓶盛,當(dāng)然要用最新的。
二示罗、python操作數(shù)據(jù)庫的流程
控制臺(tái)惩猫、jdbc、python等操作數(shù)據(jù)庫流程大致相同:
1蚜点、加載驅(qū)動(dòng)轧房,python中直接引入PyMySQL模塊即可
2奶镶、獲取連接厂镇,此處要提供ip地址左刽、端口號(hào)、用戶名和密碼等
3欠痴、獲取能夠操作數(shù)據(jù)庫sql語句的對(duì)象迄靠,比如PreparedStatement掌挚,這里是cursor對(duì)象
4菩咨、執(zhí)行sql語句,當(dāng)然前提是編輯好sql,提供好sql中的(動(dòng)態(tài))參數(shù)
5雏亚、針對(duì)結(jié)果的處理,如果是查詢查辩,一般需要遍歷,如果是插入之類长踊,會(huì)返回是否成功等
6、關(guān)閉連接身弊,數(shù)據(jù)庫連接是一種資源列敲,使用完之后要關(guān)閉戴而。
三、python使用PyMySQL操作數(shù)據(jù)庫
下面案例內(nèi)容引自于:http://www.runoob.com/python3/python3-mysql.html
#!/usr/bin/python3
import pymysql
def create_table():
# 打開數(shù)據(jù)庫連接
db = pymysql.connect("localhost", "root", "root", "python_test_db")
# 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對(duì)象 cursor
cursor = db.cursor()
# 創(chuàng)建表sql
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# 關(guān)閉數(shù)據(jù)庫連接
db.close()
def insert():
# 打開數(shù)據(jù)庫連接
db = pymysql.connect("localhost", "root", "root", "python_test_db")
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# 執(zhí)行sql語句
cursor.execute(sql)
# 提交到數(shù)據(jù)庫執(zhí)行
db.commit()
except:
# 如果發(fā)生錯(cuò)誤則回滾
db.rollback()
# 關(guān)閉數(shù)據(jù)庫連接
db.close()
def select():
# 打開數(shù)據(jù)庫連接
db = pymysql.connect("localhost", "root", "root", "python_test_db")
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 執(zhí)行SQL語句
cursor.execute(sql)
# 獲取所有記錄列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印結(jié)果
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income))
except:
print("Error: unable to fetch data")
# 關(guān)閉數(shù)據(jù)庫連接
db.close()
def update():
# 打開數(shù)據(jù)庫連接
db = pymysql.connect("localhost", "root", "root", "python_test_db")
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 執(zhí)行SQL語句
cursor.execute(sql)
# 提交到數(shù)據(jù)庫執(zhí)行
db.commit()
except:
# 發(fā)生錯(cuò)誤時(shí)回滾
db.rollback()
# 關(guān)閉數(shù)據(jù)庫連接
db.close()
def delete():
# 打開數(shù)據(jù)庫連接
db = pymysql.connect("localhost", "root", "root", "python_test_db")
# 使用cursor()方法獲取操作游標(biāo)
cursor = db.cursor()
# SQL 刪除語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# 執(zhí)行SQL語句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 發(fā)生錯(cuò)誤時(shí)回滾
db.rollback()
# 關(guān)閉連接
db.close()
if __name__ == '__main__':
create_table()
insert()
select()
update()
delete()
幾點(diǎn)說明:
1扶踊、原文中,創(chuàng)建表的sql說是預(yù)處理的sql命满,不太明白绣版。預(yù)處理的sql,我所知道的是問號(hào)做占位符诈唬,然后按序指定參數(shù)缩麸,防止SQL注入杭朱,同時(shí)多次執(zhí)行同一sql時(shí)提高效率用的,就像jdbc中的PreparedStetement中sql語句的用法弧械。
2、python中的三引號(hào)""""""能包含多行字符串羞迷,一般用于包括復(fù)雜的字符串,比如html或sql語句等
3浊猾、Python查詢Mysql使用 fetchone() 方法獲取單條數(shù)據(jù), 使用fetchall() 方法獲取多條數(shù)據(jù)热鞍。
- fetchone(): 該方法獲取下一個(gè)查詢結(jié)果集。結(jié)果集是一個(gè)對(duì)象
- fetchall(): 接收全部的返回結(jié)果行.
- rowcount: 這是一個(gè)只讀屬性幅疼,并返回執(zhí)行execute()方法后影響的行數(shù)
4爽篷、對(duì)于支持事務(wù)的數(shù)據(jù)庫慢睡, 在Python數(shù)據(jù)庫編程中,當(dāng)游標(biāo)建立之時(shí)泪喊,就自動(dòng)開始了一個(gè)隱形的數(shù)據(jù)庫事務(wù)髓涯。commit()方法游標(biāo)的所有更新操作,rollback()方法回滾當(dāng)前游標(biāo)的所有操作