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 推导式