對(duì)于mysql數(shù)據(jù)庫(kù)的操作,python提供了很多中方法,其中pymysql是一款比較常見(jiàn)且好用的第三方數(shù)據(jù)庫(kù)操作庫(kù)。對(duì)于數(shù)據(jù)庫(kù)常用的增刪改查的操作,pymysql都可以輕松實(shí)現(xiàn)。那么python怎么通過(guò)pymysql實(shí)現(xiàn)增刪改查的操作呢?接下來(lái)的這篇文章帶你了解。
1.安裝pymysql:pip install pymysql (在命令行窗口中執(zhí)行)
2.卸載pymysql:pip uninstall pymysql (在命令行窗口中執(zhí)行)
數(shù)據(jù)庫(kù)的連接
需要注意的是port是不用引號(hào)括起來(lái) charset是utf8不是utf-8
# 獲取數(shù)據(jù)庫(kù)連接對(duì)象
connection = pymysql.connect(host='localhost', port=3306, user='root', passwd='2732195202', db='book', charset='utf8')
# 獲取一個(gè)游標(biāo)
driver = connection.cursor()
# 執(zhí)行一條sql
driver.execute("select version()")
# 獲取執(zhí)行sql的返回值
resultData=driver.fetchall()
print(resultData)
# 關(guān)閉數(shù)據(jù)庫(kù)
connection.close()
創(chuàng)建數(shù)據(jù)庫(kù)表
import pymysql
#獲取數(shù)據(jù)庫(kù)連接對(duì)象
connection = pymysql.connect(host='localhost', port=3306, user='root', passwd='2732195202', db='book', charset='utf8')
#獲取一個(gè)游標(biāo)
driver=connection.cursor()
# 如果該數(shù)據(jù)庫(kù)存在就刪除
driver.execute("drop table if exists t_emp ")
# 定義sql語(yǔ)句
sql=""" CREATE TABLE `t_emp` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`department` varchar(20) DEFAULT NULL COMMENT '部門(mén)',
`salary` decimal(10,2) DEFAULT NULL COMMENT '工資',
`age` int(11) DEFAULT NULL COMMENT '年齡',
`sex` varchar(4) DEFAULT NULL COMMENT '性別',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
# 執(zhí)行sql
driver.execute(sql)
# 關(guān)閉數(shù)據(jù)連接
connection.close()
向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)
1.需要注意的是規(guī)范sql,該寫(xiě)的字段都寫(xiě)上,不使用默認(rèn)對(duì)應(yīng)
2.提交事務(wù)的對(duì)象是數(shù)據(jù)庫(kù)連接對(duì)象,而不是游標(biāo)對(duì)象
3.pycharm連接mysql數(shù)據(jù)時(shí),如果連接驅(qū)動(dòng)是高版本,需要加上時(shí)區(qū),jdbc:mysql://localhost/book?serverTimezone=GMT%2B8
4.如果主鍵是自動(dòng)遞增,則不能手動(dòng)指定值,不能寫(xiě)該字段,讓其自增長(zhǎng)
# 獲取數(shù)據(jù)庫(kù)連接對(duì)象
connection=pymysql.connect(host='localhost',port=3306,user='root',passwd='2732195202',db='book',charset='utf8')
# 獲取一個(gè)游標(biāo)
driver=connection.cursor()
# 定義sql語(yǔ)句
sql=""" insert into t_emp(name,department,salary,age,sex)
values("tom","開(kāi)發(fā)部",8000,25,"男"), ("tom","開(kāi)發(fā)部",8000,25,"男")
"""
# 嘗試捕捉錯(cuò)誤
try:
# 執(zhí)行SQL,并返回收影響行數(shù)
result=driver.execute(sql)
# 提交事務(wù)
connection.commit()
print("sql(insert)->error")
except:
# 如果發(fā)生錯(cuò)誤 則回滾事務(wù)
print("sql(insert)->error")
driver.rollback()
# 關(guān)閉數(shù)據(jù)庫(kù)連接
connection.close()
修改表中的數(shù)據(jù)
注意點(diǎn):在操作數(shù)據(jù)庫(kù)之前,需要確認(rèn)是否獲取連接數(shù)據(jù)庫(kù)成功,并且選中了數(shù)庫(kù)
2.卸載第三方庫(kù):pip uninstall pymysql
#獲取數(shù)據(jù)庫(kù)連接對(duì)象 autocommit=True:設(shè)置數(shù)據(jù)庫(kù)自動(dòng)提交
connection=pymysql.connect(host="localhost",port=3306,user='root',passwd='2732195202',db='book',charset='utf8',autocommit=True)
# 獲取游標(biāo)對(duì)象
driver=connection.cursor()
# 定義sql
sql="update t_emp set salary=%s,name=%s where id=%s;"
# 如果sql錯(cuò)誤就執(zhí)行回滾操作,成功就提交
try:
# 執(zhí)行sql,并且返回影響的行數(shù)
result=driver.execute(sql,[6000,"admin",19])
connection.commit()
print("sql(update)->success")
except:
print("sql(update)->error")
connection.rollback()
# 關(guān)閉數(shù)據(jù)庫(kù)連接對(duì)象
connection.close()
查詢數(shù)據(jù)
1.項(xiàng)目中的.py文件不能和python庫(kù)中的文件進(jìn)行沖突,否則會(huì)出現(xiàn)異常
# 獲取數(shù)據(jù)庫(kù)連接對(duì)象
connection=pymysql.connect(host='localhost',port=3306,user='root',passwd='2732195202',db='book',charset='utf8')
# 獲取一個(gè)游標(biāo)對(duì)象
driver=connection.cursor()
#定義sql
sql="select id, name, department, salary, age, sex from t_emp where id>%s and sex=%s"
# 只能獲取一次,獲取多次的時(shí)候會(huì)獲取到null 如果是多個(gè)參數(shù),需要傳遞一個(gè)元組
try:
driver.execute(sql,(1,"女"))
# 獲取所有的查詢結(jié)果 返回一個(gè)元組
resultAll=driver.fetchall()
print("resultAll:", resultAll)
# 獲取2條數(shù)據(jù)
resultTwo=driver.fetchmany(2)
print("resultTwo:", resultTwo)
# 獲取一條數(shù)據(jù)
resultOne=driver.fetchone()
print("resultThree:", resultOne)
print("sql(select)->success")
except:
connection.rollback()
print("sql(select)->error")
# 關(guān)閉數(shù)據(jù)庫(kù)連接
connection.close()
刪除表中的記錄
import pymysql
# 獲取數(shù)據(jù)庫(kù)連接對(duì)象
connection = pymysql.connect(host='localhost', port=3306, user='root', passwd='2732195202', db='book', charset='utf8')
# 獲取一個(gè)游標(biāo)
driver = connection.cursor()
# 定義sql
sql="delete from t_emp where id=%s"
try:
# 執(zhí)行一條sql
driver.execute(sql, (21))
# 提交事務(wù)
connection.commit()
print("sql(delete)->success")
except Exception as e:
# 回滾事務(wù)
connection.rollback()
print("sql(delete)->error")
print(e)
#關(guān)閉數(shù)據(jù)庫(kù)連接
connection.close()
事務(wù)操作
提交事務(wù): connection.commit()
回滾事務(wù): connection.rollback()
總結(jié)
到此這篇python使用pymsql實(shí)現(xiàn)增刪改查的文章就介紹到這了,更多相關(guān)pymsql使用介紹請(qǐng)搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。