基础工作
安装包
pipenv install flask-sqlalchemy
pipenv install PyMySql
准备数据库
数据库名字 testpython 里面一张表 student
里面三个字段 id name age 然后随便插入 5 条数据
Python 操作数据库
分成 8 个步骤
(1) 导包
import pymysql
(2) 数据库链接设置
conn = pymysql.connect(host,user,password,port,db,charset)
- begin():开启事务
- commit():提交事务 (执行增删改,需要用得到)
- cursor():创建游标
- ping(): 检查链接是否存在,不存在就会重新激活
- rollback(): 回滚事务
- close():关闭链接
- select_db(): 选择数据库
- show_warnings(): 查看 warnings 信息
(3) 生成游标(执行 sql,获取数据)
- execute():执行单挑语句
- executemany(): 执行多条语句
- fetchone():获取第一行
- fetchmany(size):获取下几(size)行
- fetchall(): 获取剩下所有的行
- scroll(num,mode): 移动游标
- rowcount:计算 corsor 的行数
- description: 返回字段信息
- close():关闭游标
重点 4 个 excute() excutemany() fetchall() close()
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
(4) 编写 sql 语句
sql = 'select * from student'
(5) 执行 sql 语句
cur.excute(sql)
(6) 获取数据
data = cur.fetchall()
(7) 关闭游标
cur.close()
(8) 关闭链接
conn.close()
这里特别注意的就是要是关闭链接后。每个接口前必须判断一下
检查是否断开链接 conn.ping(reconnect=True)
demo1
# coding utf-8#
#-----------------------------------------------
# Name: app
# Description
# Author: 雾烟云
# Date: 2020/8/8 0008
from flask import Flask
from flask import jsonify
import pymysql
# 链接数据库
conn = pymysql.connect(host='127.0.0.1', # 主机地址
user='root', # 用户名
password='123456', # 密码
port=3306, # 端口
db="textpython", # 数据库
charset="utf8") # 字符集
# 实例化
app = Flask(__name__)
@app.route("/student",methods=['POST','GET'])
def student():
#检查是否断开链接
conn.ping(reconnect=True)
# 生成游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让返回的数据是字典的形式
# 编写sql语句
sql = 'select * from student;'
# 执行
cur.execute(sql)
# 获取数据
data = cur.fetchall()
print(data)
# 关闭游标
cur.close()
# 关闭链接
conn.close()
# 给前端返回数据
return jsonify(data)
# 插入数据
@app.route("/insertstudent",methods=['POST','GET'])
def student2():
# 如果断开就重新链接
conn.ping(reconnect=True)
# 生成游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让返回的数据是字典的形式
# 编写sql语句
sql = 'Insert into student(id,name,age) values(6,"王五",20); '
# 执行
cur.execute(sql)
# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭链接
conn.close()
# 给前端返回数据
data = {
'code':200,
'result':{
'success': True
}
}
return jsonify(data)
# 修改数据
@app.route("/updatestudent",methods=['POST','GET'])
def student3():
# 如果断开就重新链接
conn.ping(reconnect=True)
# 生成游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让返回的数据是字典的形式
# 编写sql语句
sql = 'Update student set name="李四" where id=6'
# 执行
cur.execute(sql)
# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭链接
conn.close()
# 给前端返回数据
data = {
'code':200,
'result':{
'success': True
}
}
return jsonify(data)
# 删除数据
@app.route("/deletestudent",methods=['POST','GET'])
def student4():
# 如果断开就重新链接
conn.ping(reconnect=True)
# 生成游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让返回的数据是字典的形式
# 编写sql语句
sql = 'delete from student where id=6 '
# 执行
cur.execute(sql)
# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭链接
conn.close()
# 给前端返回数据
data = {
'code':200,
'result':{
'success': True
}
}
return jsonify(data)
# 执行多条语句
@app.route("/manysql",methods=["POST","GET"])
def student5():
# 如果断开就重新链接
conn.ping(reconnect=True)
# 生成游标
cur = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让返回的数据是字典的形式
# 编写sql语句
sql = 'Insert into student(id,name,age) values(%s,%s,%s); '
# 多条执行必须用executemany,参数是list
values = [(6,"王五",37),(7,"李四",26),(8,"侯六",33)]
cur.executemany(sql,values)
# 提交事务
conn.commit()
# 关闭游标
cur.close()
# 关闭链接
conn.close()
# 给前端返回数据
data = {
'code':200,
'result':{
'success': True
}
}
return jsonify(data)
if __name__ =="__main__":
app.run(host="127.0.0.1",debug=True,port=5000)
总结
开始必须 conn.ping(reconnect=True)
select 是游标 cur.fetchall,增删改必须是链接 conn.commit()
最后都关闭 close