在开发过程中,难免要用到后台服务器进行数据的存取,使用Python Flask能快速搭建一个简单的本地后台服务,与本地Mysql进行数据交互。
项目目录:
(创建如图红框的三个文件,路径可不同,只要最后能导入其余文件即可)
config.py文件是用来进行mysql配置的,内容如下
# MySQL配置
MYSQL_HOST = "127.0.0.1" # 表示本地的地址
MYSQL_PORT = 3306 # 端口号
MYSQL_USER = "root" # mysql用户名(需自行修改!!!)
MYSQL_PASSWD = "sjh666" # mysql密码(需自行修改!!!)
MYSQL_DB = "android" # mysql中创建的数据库名称(需自行修改!!!)
mysql_operate.py文件是对数据库进行的操作,内容如下
# 需导入pymysql,自行下载包
import pymysql
# 导入config包中导入config,py文件中对数据库进行的配置
from config.config import MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASSWD,MYSQL_DB
class MysqlDb():
def __init__(self, host, port, user, passwd, db):
# 建立数据库连接
self.conn = pymysql.connect(
host=host,
port=port,
user=user,
passwd=passwd,
db=db
)
self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def select_db(self, sql):
"""查询"""
# 检查连接是否断开,如果断开就进行重连
self.conn.ping(reconnect=True)
# 使用 execute() 执行sql
self.cur.execute(sql)
# 使用 fetchall() 获取查询结果
data = self.cur.fetchall()
return data
def __del__(self): # 对象资源被释放时触发,在对象即将被删除时的最后操作
# 关闭游标
self.cur.close()
# 关闭数据库连接
self.conn.close()
def execute_db(self, sql):
"""更新/新增/删除"""
try:
# 检查连接是否断开,如果断开就进行重连
self.conn.ping(reconnect=True)
# 使用 execute() 执行sql
self.cur.execute(sql)
# 提交事务
self.conn.commit()
return "插入成功"
except Exception as e:
# 回滚所有更改
self.conn.rollback()
return "操作出现错误"
# 定义一个实例对象,方便别的文件引用其方法
db = MysqlDb(MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWD, MYSQL_DB)
main.py文件为主要页面操作,内容如下
from flask import Flask # 需自行下载Flask包,并导入这几个内容
from flask import jsonify
from flask import request
from common import mysql_operate # 从common包中导入mysql_operate,使用其db
app = Flask(__name__)
# 初始化生成一个app对象,这个对象就是Flask的当前实例对象,后面的各个方法调用都是这个实例
# Flask会进行一系列自己的初始化,比如web API路径初始化,web资源加载,日志模块创建等。然后返回这个创建好的对象给你
@app.route("/") # 自定义路径
def index():
return 'Hello!'
@app.route("/query") # 自定义query路径
def get_all_users():
"""获取所有用户信息"""
sql = "SELECT * FROM favorites" # sql语句,可自行对应自己数据相应的表进行操作
data = mysql_operate.db.select_db(sql) # 用mysql_operate文件中的db的select_db方法进行查询
print("获取所有用户信息 == >> {}".format(data)) # 在pycharm下打印信息
return jsonify(data) # 在页面输出返回信息的json格式
@app.route("/insert", methods=["GET", "POST"]) # 表示GET和POST方法都可以进行操作
def insert():
"""插入信息"""
url = str(request.args.get('url')) # url为页面端输入的值
title = str(request.args.get('title'))
sql = "SELECT * FROM favorites WHERE url = '" + url + "'"
data = mysql_operate.db.select_db(sql)
if data: # 判断是否有返回数据,如果有则表示已经存在
return '已收藏'
else: # 如果没有,则插入新数据
sql1 = "insert into favorites(url,title) values('" + url + "','" + title + "');"
mysql_operate.db.execute_db(sql1)
return '收藏成功'
@app.route("/delete", methods=["GET", "POST"]) #
def delete():
"""删除信息"""
id = str(request.args.get('id'))
sql = "SELECT * FROM favorites WHERE id =" + id
data = mysql_operate.db.select_db(sql)
if data:
sql1 = "DELETE FROM favorites WHERE id =" + id
mysql_operate.db.execute_db(sql1)
return '删除成功'
else:
return '不存在此id'
if __name__ == '__main__':
app.run(debug=True, host='127.0.0.1', port=8888) #
# flask默认是没有开启debug模式的,开启debug模式,可以帮助我们查找代码里面的错误
# host = '127.0.0.1' 表示设置的ip,如果需要连接手机等设备,可以将手机和电脑连接同一个热点,将host设置成对应的ip
# port 为端口号,可自行设置
完成效果:
完成上面三个文件的设置后,在main.py文件下进行run,将会出现
主页面:
点击蓝色连接将会弹出网页,因为
@app.route("/") # 自定义路径
def index():
return 'Hello!'
这一段代码,所以主界面是Hello!
insert页面
接下来在网页端输入如下,测试insert
再打开数据库对应的表时,会发现多了一条数据,(id是自增的,所以不用在意)
query页面
输出数据库中数据的json格式
delete页面
此时数据库中id为63的数据已经被删除了
最后注意:
1.在使用后台服务时,确保Python开启服务,不然服务就没有哦!
2.调用接口时,需保证调用的url与页面端的地址相同