通过上一篇的简单封装数据库方法,大家也对封装有所了解,其实封装数据库有很多种方法,但在这里,简单再封装一个对sql语句的详细封装方法
操作前提:
- 电脑上已装好mysql服务,并配置好相应环境
- 已有python环境,并装好相应的编译器(如pycharm)
- 打开cmd ,输入: pip install pymysql ,安装pymysql库
这些已经准备好后,查看是否存在数据库
打开cmd,连接mysql,查看自己有没有数据库:
show databases;
没有就创建一个名为start的数据库:
create database start;
打开pycharm编译器,开始封装数据库
先创建一个DB类,并写好初始化方法及连接数据库操作
class DB():
def __init__(self,table_name,user,host,database,password,charset): #charset是一个设置字符格式
import pymysql
self.connect = pymysql.connect(user = user,host = host,database = database,password = password,charset = charset)
self.table_name = table_name
传入要做操作的表名字,即使不存在也可以,后续会创建相对应的表
之后就是连接数据库的必传参了
user = 数据库的账户名
host = ip地址,本机就传localhost就可以
database = 你要连接的数据库名
password = 你的数据库密码
charset = 设置数据库的字符集
创建表方法
def get_table(self): #创建表
# 这里用的是拼接,通过你传入的表名字来创建相应的表,当然,这里的表结构你也可以改变
sql = 'create table ' + self.table_name + "(id int primary key auto_increment,name varchar(20),age" \
" int,address varchar(30)) "
try:
# 使用with语句可以免去关闭游标和数据库的操作
with self.connect.cursor() as cursor:
cursor.execute(sql)
except:
# 如果报错,游标回滚
self.connect.rollback()
需要注意的是,在写create table 时,后面要跟上空格,要不sql语句会粘到一起
id int primary key auto_increment 设置id为主键,且自增
封装清空表数据方法
def clear_data(self):
#清空表内全部数据,恢复初始状态,如果你是copy的代码在工作中的话,慎用此方法
sql = 'delete from ' + self.table_name #需要注意的是,在delete from后面要有空格隔开
with self.connect.cursor() as cursor:
# 取消绑定主键
cursor.execute('set foreign_key_checks =0;')
cursor.execute(sql)
# 对数据库进行删除、修改、插入语句记得commit到数据库
self.connect.commit()
这里也是一样,在写完delete from 时,后面要跟上空格
且在做了操作以后,要记得commit()提交到数据库
插入数据方法
def insert_into(self,datas):
# datas 需要插入到数据库中的数据,传入格式为字典,如{"name":"白嘉诚","age":"20"}
# 做循环处理,将每一个循环到的值转换为字符串形式
for i in datas:
datas[i] = "'" + str(datas[i]) + "'" # 打印结果: '白嘉诚' '20'
print(datas[i])
key = ','.join(datas.keys()) # 做变量存储及逗号拼接,key保留传入字典形式的键
values = ','.join(datas.values()) # 做变量存储及逗号拼接,values保留传入字典形式的值
# 需要注意的是,insert into后面要有空格隔开
sql = "insert into " + self.table_name + "(" + key + ") values (" + values + ")"
# 这里就是关键了,通过上面的方法进行处理后,我们只需要传入有键(字段)和值(相对应的字段值)就可以插入语句
try:
with self.connect.cursor() as cursor:
cursor.execute(sql)
self.connect.commit()
except Exception as e:
print("insert into error",e)
self.connect.rollback()
这种封装还算比较实用,因为我只需要传入一个有键、值的字典就行,比如我现在一个只有name的字段的表,那么传入的datas就可以这样:
{“name”:“某某某”}
当然,多了也是可以,举个例子,后面会写上调用
查询语句封装
def select_data(self,name,value): # name为字段名,value为你要查询的值
sql = 'select * from ' + self.table_name + " where " + name + "=" + "'" + value + "'"
try:
with self.connect.cursor() as cursor:
cursor.execute(sql)
return cursor.fetchall()
except Exception as e:
print("表内没有这样的数据")
也是一样,记得在写好select * from 后面要加上空格
这里返回的是所有符合查询条件的数据
其中封装方法中的name就是数据库表中的字段名,value就是我们要查找的对应值
调用封装,简单实例
#实例化DB类
a = DB('student',user = 'root',database = 'user',password = '12345678',host = 'localhost',charset = 'utf8mb4')
a.get_table() #调用创建表方法
a.clear_data() #清除表内数据
a.insert_into(datas = {"name":"佰嘉城","age":"20","address":"吉林"}) # 插入一条数据
print(a.select_data("name","佰嘉城")) # 查询符合条件的数据
全部代码演示
class DB():
def __init__(self,table_name,user,host,database,password,charset): #charset是一个设置字符格式
import pymysql
self.connect = pymysql.connect(user = user,host = host,database = database,password = password,charset = charset)
self.table_name = table_name
def get_table(self): #创建表
# 这里用的是拼接,通过你传入的表名字来创建相应的表,当然,这里的表结构你也可以改变
sql = 'create table ' + self.table_name + "(id int primary key auto_increment,name varchar(20),age" \
" int,address varchar(30)) "
try:
# 使用with语句可以免去关闭游标和数据库的操作
with self.connect.cursor() as cursor:
cursor.execute(sql)
except:
# 如果报错,游标回滚
self.connect.rollback()
def clear_data(self):
#清空表内全部数据,恢复初始状态,如果你是copy的代码在工作中的话,慎用此方法
sql = 'delete from ' + self.table_name #需要注意的是,在delete from后面要有空格隔开
with self.connect.cursor() as cursor:
# 取消绑定主键
cursor.execute('set foreign_key_checks =0;')
cursor.execute(sql)
# 对数据库进行删除、修改、插入语句记得commit到数据库
self.connect.commit()
def insert_into(self,datas):
# datas 需要插入到数据库中的数据,传入格式为字典,如{"name":"白嘉诚","age":"20"}
# 做循环处理,将每一个循环到的值转换为字符串形式
for i in datas:
datas[i] = "'" + str(datas[i]) + "'" # 打印结果: '白嘉诚' '20'
print(datas[i])
key = ','.join(datas.keys()) # 做变量存储及逗号拼接,key保留传入字典形式的键
values = ','.join(datas.values()) # 做变量存储及逗号拼接,values保留传入字典形式的值
# 需要注意的是,insert into后面要有空格隔开
sql = "insert into " + self.table_name + "(" + key + ") values (" + values + ")"
# 这里就是关键了,通过上面的方法进行处理后,我们只需要传入有键(字段)和值(相对应的字段值)就可以插入语句
try:
with self.connect.cursor() as cursor:
cursor.execute(sql)
self.connect.commit()
except Exception as e:
print("insert into error",e)
self.connect.rollback()
def select_data(self,name,value): # name为字段名,value为你要查询的值
sql = 'select * from ' + self.table_name + " where " + name + "=" + "'" + value + "'"
try:
with self.connect.cursor() as cursor:
cursor.execute(sql)
return cursor.fetchall()
except Exception as e:
print("表内没有这样的数据")
if __name__ == '__main__':
a = DB('student',user = 'root',database = 'user',password = '12345678',host = 'localhost',charset = 'utf8mb4')
a.get_table()
a.clear_data()
a.insert_into(datas = {"name":"佰嘉城","age":"20","address":"吉林"})
print(a.select_data("name","佰嘉城"))
utf8mb4和utf8的区别我就不详细说了,大家可以看看这篇博客:https://blog.csdn.net/grl18840839630/article/details/105597074
总的而言,较比上一篇博客的数据库封装,这种的相对简单一些,但是比较笨拙,比如多表联查。
做一般的增、删、改、查还算是比较友好,看大家喜欢了