当前位置:Gxlcms > 数据库问题 > python连接数据库

python连接数据库

时间:2021-07-01 10:21:17 帮助过:5人阅读

import MySQLdb 2 # 导入 MySQL 库 3 4 class MysqlMethod(object): 5 def __init__(self): 6 # 前提:能够连接上数据库 7 self.get_connect() 8 9 10 def get_connect(self): 11 # 获取连接 12 try: 13 self.conn = MySQLdb.connect( 14 host = 127.0.0.1, 15 # 主机 16 user = root, 17 # 用户名 18 passwd = root, 19 # 密码 20 db = python_prac, 21 # 数据库 22 port = 3306, 23 # 端口号 24 charset = utf8 25 # 避免字符编码问题 26 ) 27 except MySQLdb.Error as e: 28 print("连接数据库时,出现错误") 29 print("错误信息如下:\n %s"%e) 30 else: 31 print("连接 MySQL 成功!") 32 33 34 def close_connect(self): 35 # 关闭连接 36 try: 37 # 关闭连接 38 self.conn.close() 39 # 关闭数据库连接 40 except MySQLdb.Error as e: 41 print("关闭数据库时出现错误") 42 print("错误信息如下:\n %s"%e) 43 else: 44 print("退出成功,欢迎下次使用!") 45 46 47 def get_onedata(self): 48 # 获取一条数据 49 cursor = self.conn.cursor() 50 # 获取游标 51 sql = select * from students where age between %s and %s 52 # 查询语句 53 cursor.execute(sql,(15,25)) 54 # execute(语句,(参数)) 55 result = dict(zip([k[0] for k in cursor.description],cursor.fetchone())) 56 ‘‘‘ 57 zip(列表推导式,获取到的值) 58 字典的键:描述数据的值 59 字典的值:获取到的值 60 例: 61 lst_keys = [‘a‘,‘b‘,‘c‘] 62 lst_values = [1,2,3] 63 dict(zip(lst_keys,lst_values)) 64 得到的结果: 65 {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} 66 ‘‘‘ 67 # 元组类型转换为字典,便于通过索引查找数据 68 print("获取到一条数据:") 69 return result 70 71 def get_moredata(self,page,page_size): 72 # 添加多条数据 73 offset = (page - 1) * page_size 74 # 起始位置 75 cursor = self.conn.cursor() 76 sql = select * from students where age between %s and %s limit %s,%s; 77 cursor.execute(sql,(15,45,offset,page_size)) 78 result = list(dict(zip([k[0] for k in cursor.description],row)) for row in cursor.fetchall()) 79 ‘‘‘ 80 81 使用 zip 将 列名 和 获取到的数据 压缩为一个个单独的二元组 82 但类型为 <class ‘zip‘> 需要进行转换才能看到具体的值 83 zip([k[0] for k in cursor.description],row) 84 (‘id‘, 1)··· 85 使用 dict 将 zip 类型转换为字典类型 86 dict(zip([k[0] for k in cursor.description],row)) 87 {‘id‘: 1,···} 88 使用 列表推导式 将每一个 row 变为查找到的多个数据中的一个 89 原理:[元素操作 for 元素 in 序列对象] 90 list -> [] 91 list[ row 的操作 for row in 数据集] 92 ‘‘‘ 93 print("获取到多条数据:") 94 # result 为[{},{}] 形式 95 return result 96 97 def insert_onedata(self): 98 # 添加一条数据 99 try: 100 sql = "insert into stu_0415(name,school) values (%s,%s);" 101 # 查询语句 102 cursor = self.conn.cursor() 103 # 获取游标 104 need_info = (王五,厦大) 105 # 需要插入的数据 106 cursor.execute(sql,need_info) 107 # 运行 sql 语句 108 self.conn.commit() 109 # 提交,如果没有提交,数据库数据不会发生变化 110 except : 111 print("插入数据失败") 112 self.conn.rollback() 113 # 如果个别数据插入成功了,则也不算入数据库 114 print("插入数据成功") 115 116 def main(): 117 sql_obj = MysqlMethod() 118 # 创建一个 sql 对象 119 data = sql_obj.get_onedata() 120 # 获取一条数据 121 print(data) 122 123 moredata = obj.get_moredata(1,5) 124 # 查看 0~5 的数据 125 for item in moredata: 126 print(item) 127 # 循环遍历输出字典对象 128 print("-------------") 129 obj.insert_onedata() 130 # 插入一条数据 131 132 if __name__ == __main__: 133 main() 134 # 运行主程序

2020-04-15

python连接数据库

标签:nec   fse   ali   失败   问题   %s   ict   ros   推导式   

人气教程排行