retacnyue 2020-04-15
import MySQLdb # 导入 MySQL 库 class MysqlMethod(object): def __init__(self): # 前提:能够连接上数据库 self.get_connect() def get_connect(self): # 获取连接 try: self.conn = MySQLdb.connect( host = ‘127.0.0.1‘, # 主机 user = ‘root‘, # 用户名 passwd = ‘root‘, # 密码 db = ‘python_prac‘, # 数据库 port = 3306, # 端口号 charset = ‘utf8‘ # 避免字符编码问题 ) except MySQLdb.Error as e: print("连接数据库时,出现错误") print("错误信息如下:\n %s"%e) else: print("连接 MySQL 成功!") def close_connect(self): # 关闭连接 try: # 关闭连接 self.conn.close() # 关闭数据库连接 except MySQLdb.Error as e: print("关闭数据库时出现错误") print("错误信息如下:\n %s"%e) else: print("退出成功,欢迎下次使用!") def get_onedata(self): # 获取一条数据 cursor = self.conn.cursor() # 获取游标 sql = ‘select * from students where age between %s and %s‘ # 查询语句 cursor.execute(sql,(15,25)) # execute(语句,(参数)) result = dict(zip([k[0] for k in cursor.description],cursor.fetchone())) ‘‘‘ zip(列表推导式,获取到的值) 字典的键:描述数据的值 字典的值:获取到的值 例: lst_keys = [‘a‘,‘b‘,‘c‘] lst_values = [1,2,3] dict(zip(lst_keys,lst_values)) 得到的结果: {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} ‘‘‘ # 元组类型转换为字典,便于通过索引查找数据 print("获取到一条数据:") return result def get_moredata(self,page,page_size): # 添加多条数据 offset = (page - 1) * page_size # 起始位置 cursor = self.conn.cursor() sql = ‘select * from students where age between %s and %s limit %s,%s;‘ cursor.execute(sql,(15,45,offset,page_size)) result = list(dict(zip([k[0] for k in cursor.description],row)) for row in cursor.fetchall()) ‘‘‘ 使用 zip 将 列名 和 获取到的数据 压缩为一个个单独的二元组 但类型为 <class ‘zip‘> 需要进行转换才能看到具体的值 zip([k[0] for k in cursor.description],row) (‘id‘, 1)··· 使用 dict 将 zip 类型转换为字典类型 dict(zip([k[0] for k in cursor.description],row)) {‘id‘: 1,···} 使用 列表推导式 将每一个 row 变为查找到的多个数据中的一个 原理:[元素操作 for 元素 in 序列对象] list -> [] list[ row 的操作 for row in 数据集] ‘‘‘ print("获取到多条数据:") # result 为[{},{}] 形式 return result def insert_onedata(self): # 添加一条数据 try: sql = "insert into stu_0415(name,school) values (%s,%s);" # 查询语句 cursor = self.conn.cursor() # 获取游标 need_info = (‘王五‘,‘厦大‘) # 需要插入的数据 cursor.execute(sql,need_info) # 运行 sql 语句 self.conn.commit() # 提交,如果没有提交,数据库数据不会发生变化 except : print("插入数据失败") self.conn.rollback() # 如果个别数据插入成功了,则也不算入数据库 print("插入数据成功") def main(): sql_obj = MysqlMethod() # 创建一个 sql 对象 data = sql_obj.get_onedata() # 获取一条数据 print(data) moredata = obj.get_moredata(1,5) # 查看 0~5 的数据 for item in moredata: print(item) # 循环遍历输出字典对象 print("-------------") obj.insert_onedata() # 插入一条数据 if __name__ == ‘__main__‘: main() # 运行主程序
2020-04-15