python起HTTP服务,连接msql的增删改查示例

from flask import Flask, jsonify, request, send_from_directory
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS

app = Flask(__name__)

# 设置静态文件目录为 static 文件夹
app.static_folder = 'static'

# 允许所有路由进行跨域请求
CORS(app)

# 数据库配置,使用 SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost/test'
db = SQLAlchemy(app)

# 定义数据库模型类 AmsAttraction
class AmsAttraction(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    attraction_name = db.Column(db.String(255))
    province_city = db.Column(db.String(255))
    location = db.Column(db.String(255))
    phone = db.Column(db.String(255))
    open_hour = db.Column(db.String(255))
    introduction = db.Column(db.String(255))
    images = db.Column(db.String(255))
    add_time = db.Column(db.String(255))
    quality_grade = db.Column(db.Integer)

# 路由,用于提供静态文件服务
@app.route('/static/<path:filename>')
def static_files(filename):
    return send_from_directory(app.static_folder, filename)

# 路由,获取所有景点数据
@app.route('/')
def get_data():
    data = AmsAttraction.query.all()
    json_data = [
        {
            'id': item.id,
            'attraction_name': item.attraction_name,
            'province_city': item.province_city,
            'location': item.location,
            'phone': item.phone,
            'introduction': item.introduction,
            'images': item.images,
            'add_time': item.add_time,
            'open_hour': item.open_hour,
            'quality_grade': item.quality_grade
        }
        for item in data
    ]
    return jsonify(json_data)

# 路由,向数据库中添加一条新景点数据
@app.route('/addItem', methods=['POST'])
def add_item():
    data = request.json
    if not data:
        return jsonify({'error': '未提供输入数据'}), 400
    
    attraction = AmsAttraction(
        attraction_name=data.get('attraction_name'),
        province_city=data.get('province_city'),
        location=data.get('location'),
        phone=data.get('phone'),
        open_hour=data.get('open_hour'),
        introduction=data.get('introduction'),
        images=data.get('images'),
        add_time=data.get('add_time'),
        quality_grade=data.get('quality_grade')
    )
    db.session.add(attraction)
    db.session.commit()
    return jsonify({'message': '数据添加成功'}), 200

# 路由,根据 ID 删除一条景点数据
@app.route('/deleteItem', methods=['GET'])
def delete_item():
    id = request.args.get('id')
    
    if not id:
        return jsonify({'error': '缺少 ID 参数'}), 400

    item = AmsAttraction.query.get(id)
    
    if not item:
        return jsonify({'error': '未找到指定 ID 的项目'}), 404
    
    db.session.delete(item)
    db.session.commit()
    return jsonify({'message': '数据删除成功'}), 200

# 路由,根据 ID 获取一条景点数据
@app.route('/getItem', methods=['GET'])
def get_item():
    id = request.args.get('id')
    
    if not id:
        return jsonify({'error': '缺少 ID 参数'}), 400

    item = AmsAttraction.query.get(id)
    
    if not item:
        return jsonify({'error': '未找到指定 ID 的项目'}), 404
    
    json_data = {
        'id': item.id,
        'attraction_name': item.attraction_name,
        'province_city': item.province_city,
        'location': item.location,
        'phone': item.phone,
        'introduction': item.introduction,
        'images': item.images,
        'add_time': item.add_time,
        'open_hour': item.open_hour,
        'quality_grade': item.quality_grade
    }
    return jsonify(json_data), 200

# 路由,修改一条景点数据
@app.route('/modifyItem', methods=['POST'])
def modify_item():
    data = request.json
    
    if 'id' not in data or not isinstance(data['id'], int):
        return jsonify({'error': '缺少 ID 参数或 ID 参数无效'}), 400
    
    item = AmsAttraction.query.get(data['id'])
    
    if not item:
        return jsonify({'error': '未找到指定 ID 的项目'}), 404
    
    if 'attraction_name' in data:
        item.attraction_name = data['attraction_name']
    if 'province_city' in data:
        item.province_city = data['province_city']
    if 'location' in data:
        item.location = data['location']
    if 'phone' in data:
        item.phone = data['phone']
    if 'open_hour' in data:
        item.open_hour = data['open_hour']
    if 'introduction' in data:
        item.introduction = data['introduction']
    if 'images' in data:
        item.images = data['images']
    if 'add_time' in data:
        item.add_time = data['add_time']
    if 'quality_grade' in data:
        item.quality_grade = data['quality_grade']
    
    db.session.commit()
    return jsonify({'message': '数据更新成功'}), 200

# 启动服务
if __name__ == '__main__':
    app.run(debug=True)

这段代码是一个基于Flask框架的Python web应用程序,它实现了一个简单的API来管理景点信息。下面是代码的解读:

### 主要功能解读:
1. **应用配置与初始化**:
   - 使用`Flask`框架创建应用实例。
   - 配置静态文件目录。
   - 启用CORS以允许跨域请求。
   - 配置SQLAlchemy来连接MySQL数据库。

2. **数据库模型**:
   - 定义了`AmsAttraction`类作为数据库模型,包含景点的各种信息字段。

3. **路由定义**:
   - `@app.route('/static/<path:filename>')`:提供静态文件服务。
   - `@app.route('/')`:获取所有景点数据,并以JSON格式返回。
   - `@app.route('/addItem', methods=['POST'])`:接收POST请求,添加新的景点数据。
   - `@app.route('/deleteItem', methods=['GET'])`:接收GET请求,通过ID删除指定的景点数据。
   - `@app.route('/getItem', methods=['GET'])`:接收GET请求,通过ID获取指定的景点数据。
   - `@app.route('/modifyItem', methods=['POST'])`:接收POST请求,修改指定ID的景点数据。

4. **辅助函数**:
   - `startService`:启动Flask服务。
   - `_addItem`:内部函数,用于添加景点数据到数据库。

该代码提供了一个简单的RESTful API,可以进行基本的CRUD(创建、读取、更新、删除)操作,管理景点信息。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值