废话补多少 直接上代码from flask import Flask, request
from flask_sqlalchemy import SQLAlchemyfrom flask_migrate import Migratefrom datetime import datetimefrom waymon import res# post request.form.get("")# get request.args.get("")app = Flask(__name__)app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/test"# 追踪数据库 一般不开启app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = Falsedb = SQLAlchemy(app)class Todo(db.Model):id = db.Column(db.Integer, primary_key=True)content = db.Column(db.String(200), nullable=False)completed = db.Column(db.Integer, default=0)pub_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)def __repr__(self):return "<Task %r>" % self.idmigrate = Migrate(app=app, db=db)@app.route("/info", methods=["GET"])def info():id = request.args.get("id")task = Todo.query.filter(Todo.id == id).first()return res(task, "ok", 0)@app.route("/list", methods=['GET'])def list():page = request.args.get("page")print(page)size = request.args.get("size")print(size)tasks = Todo.query.order_by(Todo.pub_date).all()return res(tasks, "ok", 0)@app.route("/add", methods=["POST", "GET"])def add():if request.method == "POST":task_content = request.form.get("content")new_task = Todo(content=task_content)try:db.session.add(new_task)db.session.commit()return res(None, "ok", 0)except:return res(None, "err", 1)else:task_content = request.args.get("content")new_task = Todo(content=task_content)try:db.session.add(new_task)db.session.commit()return res(None, "ok", 0)except:return res(None, "err", 1)@app.route("/update/<int:id>", methods=["POST"])def update(id):task = Todo.query.get_or_404(id)if request.method == "POST":task.content = request.form["task"]try:db.session.commit()return res(None, "ok", 0)except:return res(None, "ok", 1)else:return res(None, "不支持GET", 2)@app.route("/delete/<int:id>", methods=["POST"])def delete(id):task = Todo.query.get_or_404(id)try:db.session.delete(task)db.session.commit()return res(data=None, msg="ok", status=0)except:return res(None, "err", 1)if __name__ == '__main__':app.run(port=5000)
json&get&post 返回值封装
from flask import jsonifyfrom sqlalchemy.orm import DeclarativeMetaimport requestsimport jsondef res(data=None, msg="ok", status=0):"""json 返回值"""response = {"data": data,"msg": msg,"status": status}try:response['data'] = serializer(data)return jsonify(response)except SerializationError as e:response['status'] = e.coderesponse['msg'] = e.messagereturn jsonify(response)def serializer(obj):"""将对象转换为可以序列化为JSON的数据类型"""if obj is None:return Nonetry:# 如果对象本身就是可以序列化为JSON的类型,则直接返回if isinstance(obj, (str, int, float, bool, list, tuple, dict)):return obj# 如果对象是ORM对象,则将其转换为字典并返回elif isinstance(obj.__class__, DeclarativeMeta):return {c.name: getattr(obj, c.name) for c in obj.__table__.columns}# 如果对象实现了__dict__方法,则将其转换为字典并返回elif hasattr(obj, '__dict__'):return obj.__dict__else:raise SerializationError(code=500, message="Cannot serializer obj")except Exception as e:raise SerializationError(code=500, message=str(e))class SerializationError(Exception):"""自定义的异常类,用于处理序列化错误"""def __init__(self, code, message):self.code = codeself.message = messagedef get(uri, params):"""get 请求"""response = requests.get(uri, data=params)if response.status_code == 200:result = json.loads(response.content)return resultelse:return res(None, response.text, response.status_code)def post(uri, data):"""post 请求"""response = requests.post(uri, json=data)if response.status_code == 200:result = json.loads(response.content)return resultelse:return res(None, response.text, response.status_code)
三:基础组件
python3.11 -m pip install flaskpython3.11 -m pip install SQLalchemypython3.11 -m pip install flask-sqlalchemypython3.11 -m pip install flask-migrate
四 :数据库迁移
1). 创建迁移仓库(migrations目录)python3.11 app.py db init2). 读取类的内容, 生成版本文件, 并没有真正在数据库中添加或删除;python3.11 app.py db migrate -m "版本名后缀"13). 在数据库中增删改, 也就是将迁移应用于数据库;python3.11 app.py db upgrade————————————————
五: SQLAlchemy orm 简单的使用
1 创建表class Todo(db.Model):id = db.Column(db.Integer, primary_key=True)content = db.Column(db.String(200), nullable=False)completed = db.Column(db.Integer, default=0)pub_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)def __repr__(self):return "<Task %r>" % self.id2 单条查询Todo.query.filter(Todo.id == id).first()3 多条查询Todo.query.order_by(Todo.pub_date).all()3 添加db.session.add(new_task)4 修改task.content = request.form["task"]db.session.commit()5 删除
本文详细展示了如何用PythonFlask和SQLAlchemy实现一个基础的API,包括模型定义、查询、添加、更新和删除操作,以及数据库迁移的过程。
938

被折叠的 条评论
为什么被折叠?



