写一个MySQL的操作类,避免每次重复编写代码,开箱即用,如果老铁觉得有用,可以点个关注哦
import pymysql
# 建立一个简单的数据库操作类
class SimpleMySqlClass:
# 函数要对数据库进行连接,并建立一个游标为操作数据库做准备
def __init__(self, host, db_name, user, password):
self.host = host
self.db_name = db_name
self.user = user
self.password = password
# self.port = port
# 调用函数create_connection()对数据库进行连接
self.connection = self.create_connection()
# 调用函数create_cursor()生成一个游标,为操作数据库做好准备
self.cursor = self.create_curour()
# 建立一个数据库连接
def create_connection(self):
# pymysql在1.0以后的版本需要这样写
self.connection = pymysql.connect(host=self.host, database=self.db_name,user=self.user, password=self.password)
return self.connection
# 建立一个游标
def create_curour(self):
# 通过数据库连接建立一个操作游标
self.cursor =self.connection.cursor()
return self.cursor
# 执行查询
def query_sql(self,sql):
try:
# 执行查询语句
self.cursor.execute(sql)
# 利用游标的fetchall()函数取得查询到的所有记录
data = self.cursor.fetchall()
# 返回记录
return data
except Exception:
# 发生错误时返回有错误的SQL语句
raise Exception('执行的SQL语句: '+sql+',出现异常,请检查')
# 执行增、删、改相关SQL语句
def execute(self,sql):
try:
# 执行增、删、改SQL语句时,返回的值是操作结果影响的记录数
re = self.cursor.execute(sql)
# 提交执行事务
self.connection.commit()
return re
except Exception:
# 发生错误回滚事务
self.connection.rollback()
# 返回-1提示执行出错
return -1
# # 列出数据库中的表
def list_tables(self):
sql_1 = "show tables"
try:
self.cursor.execute(sql_1)
table_list = self.cursor.fetchall()
return table_list
except Exception:
raise Exception('执行的SQL语句:'+ sql_1 +',出现异常,请检查!')
# 关闭连接,执行完相关的数据库操作,及时关闭连接是良好的编程习惯
def close(self):
self.connection.close()
# 主函数main对类进行测试
if __name__ == "__main__":
# 对类实例化
host = '192.168.1.32'
mysql_obj = SimpleMySqlClass(host, 'test_db', 'root', '123')
# 有一个数据库名字是test_db,该数据库下有一张表user_info
# 调用类中的函数query_sql执行查询语句
re = mysql_obj.query_sql('select * from user_info')
# print(re) # 打印结果:(('xiaoxiao', 1), ('xiaoA', 2), ('xiaoB', 3), ('xiaoC', 4), ('xiaoD', 5))
"""
row的打印结果:
('anle', 1)
('xiaoA', 2)
('xiaoB', 3)
('xiaoC', 4)
('xiaoD', 5)
"""
for row in re:
print("序号:",row[1],"姓名:",row[0])
# 执行增删改的SQL语句
add_count = mysql_obj.execute('insert into user_info values("xiaoE",6)')
if add_count:
print('添加成功')
else:
print("添加失败")
del_count = mysql_obj.execute('delete from user_info where name = "xiaoE"')
if del_count:
print("删除成功")
else:
print("删除失败")
# 列举数据库中的表:
table_names = mysql_obj.list_tables() # 打印table_names是一个元组,(('user',), ('user_info',))
# print(table_names)
for table in table_names:
print(table[0])
# 关闭数据库连接,节省计算机资源
mysql_obj.close()