python通過PyMySQL操作MySQL
安裝 PyMySQL
pip install pymysql
注意 如何測(cè)試是否安裝好了,打開cmd進(jìn)入python3環(huán)境,導(dǎo)入 pymysql 包,能成功導(dǎo)入并打印出版本號(hào),表示成功安裝
>>> import pymysql
>>> pymysql.__version__
'0.8.1'
操作數(shù)據(jù)庫(kù)
要操作數(shù)據(jù)庫(kù),首先就要建立和數(shù)據(jù)庫(kù)的連接,有兩種配置可以連接數(shù)據(jù)庫(kù):
-
第一種配置
con = pymysql.connect( host = '主機(jī)', port = '端口', user = '用戶名', password = '密碼', db = '數(shù)據(jù)庫(kù)名', charset = 'utf8' ) -
第二種配置
config = { "host" : "主機(jī)", "port" : "端口", "user" : "用戶名", "password" : "密碼", "db" : "數(shù)據(jù)庫(kù)名", "charset" : "utf8" } con = pymysql.connect(**config)
上述兩種方式配置, 任選一種方式來連接數(shù)據(jù)庫(kù),都是可行的,然后我們要測(cè)試是不是可以成功連上數(shù)據(jù)庫(kù)(我將采用第二種方式進(jìn)行連接)
# 以下操作基于配置好連接,在進(jìn)行測(cè)試
# 測(cè)試連接
cursor = con.cursor()
cursor.execute('select 1')
re = cursor.fetchone()
print(re)
# 關(guān)閉連接
cursor.close()
con.close()
控制臺(tái)輸出
# 打印以下,表示連接成功,否則連接失敗
(1,)
增刪改查
因?yàn)槊看斡玫竭@些操作都會(huì)連接下數(shù)據(jù)庫(kù),那么我們就可以把連接封裝成一個(gè)類,使用面向?qū)ο髞磉M(jìn)行操作
class MySQLClass:
# 初始化
def __init__(self):
self.get_conn()
# 創(chuàng)建連接
def get_conn(self):
try:
config = {
"host" : "主機(jī)",
"port" : "端口",
"user" : "用戶名",
"password" : "密碼",
"db" : "數(shù)據(jù)庫(kù)名",
"charset" : "utf8"
}
self.conn = pymysql.connect(**config)
except pymysql.Error as e:
print('Error %s: %s' % (e.args[0], e.args[1]))
# 關(guān)閉連接
def close_conn(self):
try:
if self.conn:
self.conn.close()
except pymysql.Error as e:
print('Error %s: %s' % (e.args[0], e.args[1]))
增加
def add_operate(self):
try:
# 準(zhǔn)備sql
sql = 'insert into user(name, age) values(%s, %s)'
# 找到cursor
cursor = self.conn.cursor()
# 執(zhí)行sql
cursor.execute(sql, ('Tom', 20))
# 提交事務(wù)
self.conn.commit()
# 關(guān)閉連接
cursor.close()
self.close_conn()
except :
print('error')
# 回滾
self.conn.rollback()
刪除
def delete_operate(self):
try:
sql = "delete from user where %s=%s" % ('id', 1)
cursor = self.conn.cursor()
cursor.execute(sql)
self.conn.commit()
except:
print('error')
self.conn.rollback()
修改
def update_operate(self):
try:
sql = "update user set name=%s where id=1"
cursor = self.conn.cursor()
cursor.execute(sql, ('Which666'))
self.conn.commit()
except:
print('error')
self.conn.rollback()
查詢
def search_operate(self):
# fetchone 獲取一條數(shù)據(jù)
sql ="select * from user where name=%s"
cursor = self.conn.cursor()
cursor.execute(sql, ('Tom', ))
result = cursor.fetchone()
print(result)
# 假設(shè)現(xiàn)在要通過 result['name'] 獲取 報(bào)錯(cuò)
# 通過cursor的description 我們可以得出一個(gè)詳情 這是一個(gè)元祖
print(cursor.description)
# 元祖轉(zhuǎn)字典
result =dict(zip([k[0] for k in cursor.description], cursor.fetchone()))
print(result)
print(result['name'])
# 查詢總共有多少行數(shù)據(jù)
print(cursor.rowcount)
cursor.close()
self.conn.close()
return result
def search_operate(self):
# fetchall() 獲取多條數(shù)據(jù)
sql ="select * from user where name=%s"
cursor = self.conn.cursor()
cursor.execute(sql, ('Tom', ))
result = [dict(zip([k[0] for k in cursor.description], row)) for row in cursor.fetchall()]
for i in result:
print(i)
cursor.close()
self.conn.close()
return result