PyMySQL的简单封装
MySQL数据表的操作主要包括数据的增删改查,以下先封装了一个数据库的基类
封装基类代码
import pymysql
# 数据库基本操作封装
class DataBase:
def __init__(self, password, db, host="localhost", port=3306, user="root"):
self.conn = self.get_conn(host, port, user, password, db) # 连接对象
self.cursor = self.get_cursor() # 游标对象
def get_conn(self, host, port, user, password, db):
"""
获取连接对象
:param host:主机名一般为localhost
:param port:一般为3306
:param user:此处是用root用户进行操作
:param password: 数据库连接密码
:param db:
:return:
"""
conn = pymysql.connect(host=host, port=port, user=user, passwd=password, db=db)
return conn
def get_cursor(self):
"""
获取游标对象,对数据库的操作是用游标进行访问的
:return: 游标对象
"""
cursor = self.conn.cursor()
return cursor
def select_all(self, sql):
"""
查询全部
:param sql:查询语句
:return: [{},{}]
"""
self.cursor.execute(sql)
return self.cursor.fetchall()
def select_one(self, sql):
"""
查询一个
:param sql: 查询语句
:return: {}
"""
self.cursor.execute(sql)
return self.cursor.fetchone() # 获取单条数据
def commit_data(self, sql):
"""
提交数据,用于增删改查
:param sql:
:return:
"""
self.cursor.execute(sql)
self.conn.commit()
print("表连接对象,提交成功")
def __del__(self):
"""
将游标和数据库的链接删除
"""
self.cursor.close()
self.conn.close()
注:测试时,直接将数据传入即可,如果没有报错,则说明成功
database = DataBase("123456", "parking_lot", "localhost", 3306, "root")
对数据库的一个上层封装
最近在完成一个项目的一个项目关于汽车停车场的数据存储,以下附上一个完成了部分的封装代码
from DataBase import *
class DataProcess(DataBase):
def __init__(self, password, db, host="localhost", port=3306, user="root"):
super().__init__(password, db, host, port, user) # 将参数传给父类
def create_usr_table(self):
"""
创建用户表
:return:
"""
self.cursor.execute("DROP TABLE IF EXISTS usr_table") # 若数据表存在则删除数据表
sql = """
CREATE TABLE usr_table(
usr_id int(6) NOT NULL AUTO_INCREMENT,
usr_phone varchar(12) NOT NULL,
car_num varchar(9) NOT NULL,
primary key(usr_id)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
"""
self.cursor.execute(sql)
def create_inout_table(self):
"""
创建进出表
:return:
"""
self.cursor.execute("DROP TABLE IF EXISTS in_out")
sql = """
CREATE TABLE in_out(
running_id int(6) NOT NULL AUTO_INCREMENT,
car_num varchar(9) NOT NULL,
in_time varchar(20) NOT NULL,
out_time varchar(20) NOT NULL,
primary key(running_id)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
"""
self.cursor.execute(sql)
"""
将数据插入用户表
"""
def insert_usr_table(self, in_data):
"""
将数据插入用户表
:param in_data: 输入的数据,以元祖的形式插入
:return:
"""
# data = [("157xxxx3029", "赣AMxxxx")] ##数据格式
self.cursor.executemany("insert into usr_table(usr_phone, car_num) values (%s, %s)", in_data)
self.conn.commit()
def insert_inout_table(self, in_data):
"""
将数据插入进出表
:param in_data:
:return:
"""
# data = [("15717893029", "赣AM9384")] ##数据格式
self.cursor.executemany("insert into in_out(car_num, in_time, out_time) values (%s, %s, %s)", in_data)
self.conn.commit()
if __name__ == "__main__":
database = DataProcess("123456", "parking_lot")
data = [("157xxxx4324", "赣AM9xx2")]
database.insert_usr_table(data)
# database.create_table()
data = [("赣AM9xx2", "2021/8/30-22:50", "2021/8/31-22:50")]
database.insert_inout_table(data)
data = [("赣AM9xx2", "2021/8/30-22:50", "")]
database.insert_inout_table(data)
注:创建表单中的AUTO_INCREMENT表示该数据自增,primary key(running_id)说明该表把running_id作为主键来使用
注:数据表若改成不存在则创建,存在则跳过“CREATE TABLE if not exists usr_table”