创建tomysql文件夹,里面有3个文件main.py,mysql_db.py,schema.py。
mysql_db.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
# 添加pymysql驱动,连接MySQL数据库
import pymysql
pymysql.install_as_MySQLdb()
# 创建MySQL单实例
mysql_db = SQLAlchemy()
# 创建Schema
mysql_schema = Marshmallow()
# 初始化MySQL数据库
def init_mysql_db(app: Flask):
# 配置MySQL数据库url
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:qyydhm@127.0.0.1:3306/flask_base?charset=utf8mb4"
# 关闭sqlalchemy自动跟踪数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 显示底层执行的SQL语句
# app.config['SQLALCHEMY_ECHO'] = True
# 解决‘No application found. Either work inside a view function or push an application context.’
app.app_context().push()
# 初始化app
mysql_db.init_app(app)
# 初始化schema
mysql_schema.init_app(app)
# 初始化table
def init_table():
# 删除表
mysql_db.drop_all()
# 创建表
mysql_db.create_all()
schema.py
from tomysql.mysql_db import mysql_db as db
from tomysql.mysql_db import mysql_schema as ma
# 创建用户表
class User(db.Model):
# 用户
__tablename__ = "tf_user"
id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
name = db.Column(db.String(32), nullable=False, unique=True)
pwd = db.Column(db.String(32), nullable=False)
def __repr__(self):
# 显示对象中的信息
return "User object: name=%s" % self.name
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = User
# 反序列化阶段时,直接返回模型对象
load_instance = True
main.py
from flask import Flask
from tomysql.mysql_db import mysql_db as db
from tomysql.mysql_db import init_mysql_db,init_table
from tomysql.schema import User,UserSchema
app = Flask(__name__)
init_mysql_db(app)
init_table()
def register_user():
user = User()
user.name = "mason"
user.pwd = "123456"
# 添加数据
db.session.add(user)
db.session.commit()
user_json = UserSchema().dump(user)
print(user_json)
@app.route("/register", methods=['GET'])
def register():
register_user()
return "register success!"
if __name__ == '__main__':
app.run(debug=True)