Flask-SQLAlchemy 基于一个base表 - 动态创建使用相同字段的其他业务表

1 安装

首先,确保您安装了 Flask 和 SQLAlchemy,以及 MySQL 的驱动程序(例如 mysql-connector-python 或 PyMySQL):

bash 复制代码
pip install Flask Flask-SQLAlchemy mysql-connector-python

2 创建项目结构

创建一个简单的项目结构:

bash 复制代码
my_flask_app/
│
├── app.py
└── config.py

3 配置文件 (config.py)

在 config.py 中设置 MySQL 数据库的连接信息:

python 复制代码
class Config:
    SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://username:password@localhost/db_name'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

请将 username、password 和 db_name 替换为您的 MySQL 数据库凭据。

4 创建应用和模型 (app.py)

在 app.py 中实现创建表的功能:

python 复制代码
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)

# 定义父表 Base
class Base(db.Model):
    __tablename__ = 'base'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    age = db.Column(db.Integer, nullable=False)

# 创建基础表
@app.before_first_request
def create_base_table():
    db.create_all()  # 创建所有模型的表,包括 Base

@app.route('/create_table/<table_name>', methods=['POST'])
def create_table(table_name):
    # 使用动态模型创建与 Base 相同的表
    class DynamicTable(db.Model):
        __tablename__ = table_name  # 设置表名为传入的参数
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(50), nullable=False)
        age = db.Column(db.Integer, nullable=False)

    # 创建动态表
    db.create_all()  # 创建新表
    return jsonify({"message": f"Table '{table_name}' created successfully!"})

@app.route('/add_base', methods=['POST'])
def add_base():
    data = request.json
    new_entry = Base(name=data['name'], age=data['age'])
    db.session.add(new_entry)
    db.session.commit()
    return jsonify({"message": "Entry added to base table!"})

if __name__ == '__main__':
    app.run(debug=True)

5 运行应用

确保所有代码已保存,然后在项目目录中运行应用:

bash 复制代码
python app.py

6 测试功能

您可以使用 Postman 或 curl 来测试 API。

  • 创建 base 表(在应用启动时自动创建):
bash 复制代码
curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe", "age": 30}' http://127.0.0.1:5000/add_base
  • 根据给定的表名创建新表:
bash 复制代码
curl -X POST http://127.0.0.1:5000/create_table/new_table_name

将 new_table_name 替换为您希望创建的表名。

相关推荐
Rain的Java大神之路2 分钟前
别再死磕 MySQL 了:向量数据库与 RAG 生产落地实录(Java 工程师专场)
java·后端·面试
MasonYyp11 分钟前
asyncio并发协程
python
雨中飘荡的记忆12 分钟前
SDD × Claude Code:先写清楚,再让 AI 写代码
后端
Thneonl13 分钟前
主从延迟 0 秒的谎言:SBM 的三个盲区
后端·架构
孙浩君27 分钟前
0行手写代码,我用AI做了一个打工人模拟器(含3D霓虹城市漫游)
前端·后端
羑悻28 分钟前
超越Bridge:全面掌握Docker网络隔离与通信的底层逻辑!
后端
小小张说故事29 分钟前
Python 的整数为什么永远不会溢出?拆开大整数对象,看 30 位一节的存储与运算代价
python
他日若遂凌云志30 分钟前
深入剖析 ET8 框架的 ETTask 机制:await 的挂起、唤醒、异常与零 GC
后端
星轨zb33 分钟前
[支付专题4]支付回调幂等性和状态:状态机与终态检查的边界
后端·支付架构学习
会编程的吕洞宾34 分钟前
Spring AI 2.0 结构化输出实战:让大模型返回精准 JSON 不再“抽风“,准确率从 78% 拉到 99%
java·后端