python通過PyMySQL操作MySQL
安裝 PyMySQL
pip install pymysql
注意 如何測試是否安裝好了寇漫,打開cmd
進入python3
環(huán)境郊艘,導入 pymysql
包斋竞,能成功導入并打印出版本號益眉,表示成功安裝
>>> import pymysql
>>> pymysql.__version__
'0.8.1'
操作數(shù)據(jù)庫
要操作數(shù)據(jù)庫陕壹,首先就要建立和數(shù)據(jù)庫的連接,有兩種配置可以連接數(shù)據(jù)庫:
-
第一種配置
con = pymysql.connect( host = '主機', port = '端口', user = '用戶名', password = '密碼', db = '數(shù)據(jù)庫名', charset = 'utf8' )
-
第二種配置
config = { "host" : "主機", "port" : "端口", "user" : "用戶名", "password" : "密碼", "db" : "數(shù)據(jù)庫名", "charset" : "utf8" } con = pymysql.connect(**config)
上述兩種方式配置共郭, 任選一種方式來連接數(shù)據(jù)庫眉撵,都是可行的,然后我們要測試是不是可以成功連上數(shù)據(jù)庫(我將采用第二種方式進行連接)
# 以下操作基于配置好連接,在進行測試
# 測試連接
cursor = con.cursor()
cursor.execute('select 1')
re = cursor.fetchone()
print(re)
# 關閉連接
cursor.close()
con.close()
控制臺輸出
# 打印以下落塑,表示連接成功,否則連接失敗
(1,)
增刪改查
因為每次用到這些操作都會連接下數(shù)據(jù)庫罐韩,那么我們就可以把連接封裝成一個類憾赁,使用面向?qū)ο髞磉M行操作
class MySQLClass:
# 初始化
def __init__(self):
self.get_conn()
# 創(chuàng)建連接
def get_conn(self):
try:
config = {
"host" : "主機",
"port" : "端口",
"user" : "用戶名",
"password" : "密碼",
"db" : "數(shù)據(jù)庫名",
"charset" : "utf8"
}
self.conn = pymysql.connect(**config)
except pymysql.Error as e:
print('Error %s: %s' % (e.args[0], e.args[1]))
# 關閉連接
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:
# 準備sql
sql = 'insert into user(name, age) values(%s, %s)'
# 找到cursor
cursor = self.conn.cursor()
# 執(zhí)行sql
cursor.execute(sql, ('Tom', 20))
# 提交事務
self.conn.commit()
# 關閉連接
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)
# 假設現(xiàn)在要通過 result['name'] 獲取 報錯
# 通過cursor的description 我們可以得出一個詳情 這是一個元祖
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