Mysql數據庫工具類
新建MysqlHelper/DBUtils,實現操作數據庫代碼的 復用!
分析
數據庫操作分為兩類
非查詢
增加,刪,修改 都是非查詢!
實現方法: execute(sql語句,不同參數列表)
增刪改區別: sql語句不同, 參數個數不同!--->可以獨一個共用方法,把sql和參數傳過來! # 增刪改功能都返回: 影響行數據!
def my_execute(sql,params):
,,,,
return num
查詢
查詢1條 游標.fetchone()
查詢多條 游標.fetchall()
連接數據庫相關參數所有功能都需要!–>放在類的初始化方法中init
獲取數據庫連接: 所有方法都需要!—>可以獨立出來!
init方法,負責初始連接數據庫需要各種參數!
class MysqlHelper():
# 初始化方法
def init(self,主機地址,端口,用戶名,密碼,字符集)
self.主機地址=主機地址
....
def my_execute(sql,prames):
pass
def connect():
......
使用
db = MysqlHelper(Ip地址,端口.用戶名,密碼.字符集)
增加
num =db.my_execute(sql語句,參數列表)
if num>0:
print('成功')
else:
print('失敗')
代碼實現
import pymysql # 導入數據庫驅動模塊!
class MysqlHelper():
#db = MysqlHelper('39.98.39.173',13306,'root','root','1909C2')
def init(self,host,port,user,passwd,db,charset='utf8'):
self.host= host
self.port = port
self.user = user
self.passwd = passwd
self.db = db
self.charset=charset
#self.conn = None
def connect(self):
'''功能1: 獲取連接'''
self.conn = pymysql.connect(host=self.host,port=self.port,user=self.user,passwd=self.passwd,db=sel f.db,charset=self.charset)
self.cursor =self.conn.cursor()
def close(self):
'''功能2:釋放資源'''
self.cursor.close() #關游標
self.conn.close()# 關連接
def my_execute(self,sql,params):
'''增刪改通用功能
:param sql: sql語句
:param params: 參數列表
:return: num 影響行數 '''
num =0
# 1. 打開連接
self.connect()
num = self.cursor.execute(sql,params)
self.conn.commit()
self.close() #釋放資源
return num
def get_one(self,sql,params):
''' 查詢1條
:param sql: sql語句
:param params: 參數列表
:return: 1條結果 '''
result =None
#1.打開鏈接
self.connect()
# 2.執行查詢
self.cursor.execute(sql,params)
# 3 逐行抓取
result = self.cursor.fetchone()
#4.釋放資源
self.close()
return result
def get_all(self, sql, params):
''' 查詢所有
:param sql: sql語句
:param params: 參數列表
:return: 1條結果 '''
result = ()
self.connect()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
if name == 'main':
# 實例化對象
db = MysqlHelper('39.98.39.173',13306,'root','root','1909C2')
#增加
#insert into students values(default,'張A','男',20,'2020-11-05','176','山西')
''' sql = 'insert into students values(default,%s,%s,%s,%s,%s,%s)'
params=['張B','男',20,'2020-11-05','176','山西']
num = db.my_execute(sql,params)
print(num) '''
# 查1條
sql = 'select * from students where age =%s'
params=(12)
result =db.get_one(sql,params) #((),())
print(result)
studetns = db.get_all(sql,params)
for stu in studetns:
print(f'名字:{stu[1]}')
錯誤
[SQL] insert into students values(default,'張三','男',20,'2020-11-05','176','山西')
[Err] 1062 - Duplicate entry '張三' for key 'name' # 名字重復! Duplicate:重復!
學生管理系統
from MysqlHelper import MysqlHelper #導入mysql工具類
from datetime import datetime #導入日期模塊
def add_stu():
# 1.實例化工具類
db = MysqlHelper('39.98.39.173', 13306, 'root', 'root', '1909C2')
# 2. 調用增加方法
#insert into students values(default,'張A','男',20,'2020-11-05','176','山西')
sql = 'insert into students values(default,%s,%s,%s,%s,%s,%s)'
params=['張D','男',20,datetime.now(),'176','山西']
num =db.my_execute(sql,params)
return num
def del_stu(name):
'''刪除'''
db = MysqlHelper('39.98.39.173', 13306, 'root', 'root', '1909C2')
sql = 'delete from students where name =%s'
params=[name]
num = db.my_execute(sql,params)
return num
def update_stu(oldName,name,age,sex,phone,addr):
db = MysqlHelper('39.98.39.173', 13306, 'root', 'root', '1909C2')
sql ='update students set name =%s,age=%s,sex=%s,phone=%s,addr=%s where name = %s'
params = (name,age,sex,phone,addr,oldName)
return db.my_execute(sql,params)
def get_all():
db = MysqlHelper('39.98.39.173', 13306, 'root', 'root', '1909C2')
sql = 'select * from students'
students = db.get_all(sql,None)
for stu in students:
print(f'名字:{stu[1]},性別:{stu[2]}')
def get_by_name(name):
db = MysqlHelper('39.98.39.173', 13306, 'root', 'root', '1909C2')
sql = 'select * from students where name =%s'
params = (name) students = db.get_all(sql,params)
for stu in students:
print(f'名字:{stu[1]},性別:{stu[2]}')
if name == 'main':
'''增加
if add_stu() > 0:
print('成功')
else:
print('失敗') '''
''' 刪除
if del_stu('張D') >0:
print('成功')
else:
print('失敗') '''
'''修改
if update_stu('zhang',"張小三",40,'女','110110','陝西')>0:
print('修改成功')
else:print('失敗')
'''
get_all()