Flask_Note

Flask调用数据库实现建表,插入数据
1.准备
(1)下载相应的库
pip install pymysql  # MySQL驱动
pip install flask-script==2.7.0  # flassk的外壳
pip install flask-sqlalchemy==2.4.1 # 连接数据库的桥梁
pip install flask-migrate==1.0.1  # 执行命令的操作工具
(2)在项目下创建Setting文件

【包含什么环境,以及连接数据库】

class Setting_config:
    # 具体 sqlalchemy的设置链接  https://www.jianshu.com/p/f7ba338016b8

    #   mysql+pymysql://用户名:用户密码@主机名:端口名/数据库名
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost:3306/database'  # database:数据库名
    # 当 migister去交给 manager管理时,会同时向 app发送连接,会弹出警告,对此将警告进行关闭 【如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。】
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class Develoopment_config(Setting_config):
    ENV = 'development'
    DEBUG = True

class Production_config(Setting_config):
    ENV = 'production'
    DEBUG = False
(3)创建一个新的 app 包(package)以及 extes的扩展包(package)
2.使用
1.app扩展包下的 init 文件:
import Setting


def create_app():
    app = Flask(__name__,template_folder="../templates",static_folder="../static")
    # 外部环境条件
    app.config.from_object(Setting.Production_config)
    return app
2. app开始文件
from apps import create_app
from flask_script import Manager

app = create_app()
# 创建外壳
manager = Manager(app)

if __name__ == '__main__':
    manager.run()
3.在 extes扩展包下的 init 文件导入 db
# 创建映像
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
4.在扩展包app下的 init 文件导入 db
import Setting
from Extends import db


def create_app():
    app = Flask(__name__,template_folder="../templates",static_folder="../static")
    # 外部环境条件
    app.config.from_object(Setting.Production_config)
    # 将 db对象与 app进行关联,并进行初始化配置 db 会跟 setting下的数据库进行关联
    db.init_app(app = app) 

    return app

5.在开始文件 app 中将命令的操作导入到 manager以及 app中
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager
from Extends import db
from apps import create_app

app = create_app()
# 创建外壳
manager = Manager(app)

# 命令工具的连接  目的:实现migrate和数据库的连接
migrate = Migrate(app = app ,db= db)

# 目的:将 将 migrate的命令交给 manager管理
manager.add_command('db',MigrateCommand)  # 给要执行的命令添加一个 db 名

if __name__ == '__main__':
    manager.run()
6.创建一个网站所需要的类别,比如用户,商品,货物等

创建一个 user 的package,以及 views.py ,model.py 文件

(1)model文件

# ORM 类 ——————> 表
#类对象  ——————> 表中的一条记录
from datetime import datetime
from Extends import db

# create table user(id int primarykey auto_increment,username varchar(20)...) 下面的方式类似与上面这种
class User(db.Model):
    # db.Column(类型,约束) ——》映射成表中的每一列 比如:是整型,还是浮点型,还是字符型
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(5),nullable=False)
    phone = db.Column(db.String(11),unique=True)  # 手机唯一
    datatime = db.Column(db.DateTime,default=datetime.now) # 时间
    # sex = db.Column(db.Boolean,default=False)  # 布尔类型,Flask代表男

    def __str__(self):
        return self.username  # 返回信息。可多条信息

(2)在start中导入相应的文件【目的:为了在执行操作命令时,可以将User下的model文件进行导入】

from apps.user.model import User # 然后在终端执行

(3)视图 view 文件

from flask import Blueprint,render_template

User_Blueprint = Blueprint("User_Blueprint",__name__)

@User_Blueprint.route("/",methods = ['GET','POST'])
def index():
    return render_template("index.html")

并将蓝图的 RootBlueprint 导入到 create_app中

import Setting
from apps.user.views import User_Blueprint

def create_app():
    app = Flask(__name__,template_folder="../templates",static_folder="../static")
    # 外部环境条件
    app.config.from_object(Setting.Production_config)
    app.register_blueprint(User_Blueprint) # 插上 user的蓝图
    
    return app


7.将在 view中获得的数据同步到数据库中

(1)register ——HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
<form action="{{ url_for('/register') }}" method="post">
    <input type="text" name="username" placeholder="用户名:">
    <input type="password" name="password" placeholder="用户密码:">
    <input type="password" name="repassword" placeholder="再次输入密码:">
    <input type="submit" value="注册">
</form>

</body>
</html>

(2)register——view

from flask import Blueprint,render_template,request


from Extends import db
from apps.user.models import User

User_Blueprint = Blueprint("User_Blueprint",__name__)


@User_Blueprint.route("/register",methods = ['GET','POST'])
def register():
    if  request.method == 'POST':
        username = request.form.get("username")
        password = request.form.get("password")
        repassword = request.form.get("repassword")
        if password == repassword:
            #  1.找到模板
            user = User()  # 将 用户信息添加到 model模型中去
            #  2.给对象的属性赋值
            user.username = username  # 列举一条

            #  3.添加到数据库
            db.session.add(user)  # 将数据添加到 session 缓存之中
            db.session.commit()  # 进行提交
            return '注册成功'
        else:
            return '两次密码不一致'

    return render_template("user/register.html")
3.执行脚本:
(1)生成版本文件

[db 指代 Sqlalchemy下的实例化参数] 一个项目只需要 init一次

python app.py db init
(2)当添加了表之后,要通过以下脚本进行修改进行迁移
python app.py db migrate
(3)同步到数据库上
python app.py db upgrade
(4)降级数据库

当添加的字段不想要的时候,既要进行降级,同时要将新加的版本手动删除掉,防止再次同步的时候出现版本不一致

python app.py db downgrade

————————
内有不足!
请多指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值