PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務(wù)器的一個庫,Python2中則使用mysqldb。 1.PyMySQL的安裝 PS G:\book> pip install pymysql Collecting pymysql Downloading https://files./packages/ed/39/15045ae46f2a123019aa968dfcba0396c161c20f855f11dea6796bcaae95/PyMySQL-0.9.3-py2.py3-none-any.whl (47kB) 100% |████████████████████████████████| 51kB 17kB/s Installing collected packages: pymysql Successfully installed pymysql-0.9.3 2.使用python操作數(shù)據(jù)庫的流程 3.各個對象的介紹 導(dǎo)入import pymysql后,使用pymysql.connect函數(shù)就可以連接數(shù)據(jù)庫了。 pymysql.connect()參數(shù)說明: conn=pymysql.connect(host='127.0.0.1',user='root',passwd='123456',db='test',port=3306) 還可以簡寫為這樣: conn=pymysql.connect('127.0.0.1','root','123456','test',3306) 打開數(shù)據(jù)庫鏈接后,返回一個connection對象。 connection對象支持的方法,如下表所示: 通過connection對象的cursor方法,返回一個cursor游標(biāo)對象, cursor對象支持的方法,如下表所示: 4. 連接數(shù)據(jù)庫 import pymysql #數(shù)據(jù)庫連接,返回數(shù)據(jù)庫連接對象 conn=pymysql.connect('127.0.0.1','root','123456','tt',3306) #conn=pymysql.connect('127.0.0.1','root','123456','tt',3306) cur=conn.cursor() 5.創(chuàng)建數(shù)據(jù)表 sql=''' create table test(id int not null auto_increment primary key,username varchar(50),password varchar(50)) ''' cur.execute(sql) 注意:這段代碼是創(chuàng)建一個表,一般可以通過可視化界面進(jìn)行創(chuàng)建。 6. 插入數(shù)據(jù) 插入test表中數(shù)據(jù),該表有兩個字段,可以使用占位符%s,可以有效避免sql注入問題。參數(shù)通過元組插入。 insertsql=''' insert into test(username,password) values (%s,%s) ''' cur.execute(insertsql,('admin','123456')) 還可以executemany實現(xiàn)批量插入,比起循環(huán)插入效率要高。 insertmanysql=''' insert into test(username,password) values (%s,%s) ''' cur.executemany(insertmanysql,[('zhangsan','123456'),('master','123456')]) 上述方式無論插入單條數(shù)據(jù)還是多條數(shù)據(jù)都不會立即生效,需要進(jìn)行事務(wù)提交。 conn.commit() 如果出現(xiàn)異常,可以使用事務(wù)回滾操作 conn.rollback() 7.查詢數(shù)據(jù) 游標(biāo)對象提供了fetchall方法,獲取全部數(shù)據(jù)。返回一個元組。 Fetchone方法,獲取其中的一個結(jié)果,返回一個元組。 cur.execute('select * from test') rs=cur.fetchall() for line in rs: print(line) <class 'tuple'> (1, 'admin', '123456') (2, 'zhangsan', '123456') (3, 'master', '123456') cur.execute('select * from test') rs=cur.fetchone() print(rs) <class 'tuple'> (1, 'admin', '123456') 8.更新數(shù)據(jù) import pymysql #數(shù)據(jù)庫連接,返回數(shù)據(jù)庫連接對象 conn=pymysql.connect('127.0.0.1','root','123456','etc',3306) cur=conn.cursor() try: updatesql='update test set username=%s where id=%s' cur.execute(updatesql,('manager',1)) conn.commit() cur.execute('select * from test') rs=cur.fetchall() for line in rs: print(line) except: conn.rollback() conn.close() (1, 'manager', '123456') (2, 'zhangsan', '123456') (3, 'master', '123456') 9.刪除數(shù)據(jù) import pymysql #數(shù)據(jù)庫連接,返回數(shù)據(jù)庫連接對象 conn=pymysql.connect('127.0.0.1','root','123456','tt',3306) cur=conn.cursor() try: delsql='delete from test where id=%s' cur.execute(delsql,(3,)) conn.commit() cur.execute('select * from test') rs=cur.fetchall() print(rs) except: print('發(fā)生了錯誤') conn.rollback() conn.close() ((1, 'manager', '123456'), (2, 'zhangsan', '123456')) 可以看到,id=3的數(shù)據(jù)已經(jīng)被刪除。 python訪問數(shù)據(jù)庫基本類似,非常簡單,大家動手做一個屬于你的數(shù)據(jù)庫應(yīng)用吧。 |
|