Flask-SQLAlchemy 基于一个base表 - 动态创建使用相同字段的以他业务表
1 安装
首先,确保您安装了 Flask 和 SQLAlchemy,以及 MySQL 的驱动程序(例如 mysql-connector-python 或 PyMySQL):
pip install Flask Flask-SQLAlchemy mysql-connector-python
2 创建项目结构
创建一个简单的项目结构:
my_flask_app/
│
├── app.py
└── config.py
3 配置文件 (config.py)
在 config.py 中设置 MySQL 数据库的连接信息:
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 中实现创建表的功能:
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 运行应用
确保所有代码已保存,然后在项目目录中运行应用:
python app.py
6 测试功能
您可以使用 Postman 或 curl 来测试 API。
- 创建 base 表(在应用启动时自动创建):
- 访问 http://127.0.0.1:5000/ 不需要任何操作。
- 添加 base 表中的数据:
curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe", "age": 30}' http://127.0.0.1:5000/add_base
- 根据给定的表名创建新表:
curl -X POST http://127.0.0.1:5000/create_table/new_table_name
将 new_table_name 替换为您希望创建的表名。
原文地址:https://blog.csdn.net/weixin_44791631/article/details/145098396
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!