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