flask安装 配置项文件 以及项目优化(配置文件settings manage model view ) 连接数据库 字段类型 字段属性 数据库的使用 加载settings的方式

一、flask 数据库操作


1. flask链接操作数据库使用的框架


django 中使用ORM链接操作数据库,如果不能够用ORM 站点管理功能不能够使用

python使用pymysql链接操作数据库,flask中也可以使用pymysql链接

sqlalchemy: python的开源的ORM框架,在flask中使用flask-sqlalchemy;是通过flask对sqlalchemy 进行封装


2. 安装flask-sqlalchemy


pip install flask-sqlalchemy
pip install pymysql

3. 使用(配置mysql和sqlite链接并使用)


① 链接数据库配置信息


这里使用如下两种数据库:
sqlite3
mysql


  • 进入官方文档查看相应配置
    在这里插入图片描述
  • 配置信息
    如下所示:
    在这里插入图片描述

② 配置sqlite数据库


注意:tmp/test.db 中;///固定格式/tmp代表linux环境下根目录的文件夹目录/test.db代表tmp目录下的test.db文件;在windows下直接写///后面接绝对路径即可D:/flask/project

  • 找到文件所在路径

获取当前文件所在的根目录
在这里插入图片描述

  • 找到当前文件 print(“file”)
    在这里插入图片描述

  • config类似于django中的settings
    在这里插入图片描述
    在这里插入图片描述

  • 配置文件sqlite3数据库在本机的位置
    在这里插入图片描述
    修改到本机后的配置
    BASE_DIR路径和app.config[“SQLALCHEMY_DATABASE_URI”]打印结果
    在这里插入图片描述

  • 链接数据库格式(sqlite3)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)

## 学习sqlalchemy
## 连接数据库 sqlite3
BASE_DIR = os.path.abspath(os.path.dirname(__file__))##当前文件  项目所在根目录
app.config["SQLALCHEMY_DATABASE_URI"]="sqlite:///" + os.path.join(BASE_DIR,"test.db")  ## 链接sqlite3配置
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True  ## 请求结束之后自动提交
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True   ## 跟踪修改  flask 1.x 之后增加的配置项

db = SQLAlchemy(app)   ## 绑定flask项目

## 创建模型
class UserInfo(db.Model):
    ## 字段
    __tablename__ = "userinfo"   ##  指定表名
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32))
    time = db.Column(db.DATETIME)

## 数据迁移
db.create_all()   ## 同步表结构

@app.route("/")
def index():
    return "ORM测试"

if __name__ == '__main__':
    app.run()
  • 生成表结构后查看
    在这里插入图片描述

③ 配置链接mysql文件


配置mysql与sqlite很相似,只是在获取数据库的地方有所区别
在这里插入图片描述
添加跟踪修改配置的原因:
在这里插入图片描述
上面一行有错跟踪修改的单词有误,修改如下
在这里插入图片描述

  • 可以设置配置文件DEBUG为True
app.config["DEBUG"] = True  # 修改后自动启动项目,会报错

4. 字段类型 和 字段属性


__tablename__= "表名"  ##指定表名;相当于元数据设置表名

① 字段类型


在这里插入图片描述

db.Column接的字段意义
String字符串
Integer整型
DATETIME日期时间 datetime.datetime
Textstr 可变大小的字符串类型
DATE日期datetime.date
Booleanbool 布尔型
Timedate time.time
Unicodeunicode 可变长度的Unicode字符串类型
UnicodeTextunicode 不限制长度
Enum可以是任何类型的python对象 枚举
BigIntegerint 整型
Floatfloat(当asdecimal=True时,强制转换为decimal.Decimal对象) 浮点型

② 字段属性 flask --db-Column属性


有如下一些:
使用datetime要导包

from datetime import datetime

在这里插入图片描述

db.Column接的属性意义
primary_key如果设为 True,这列就是表的主键
unique如果设为 True,这列不允许出现重复的值
index如果设为 True,为这列创建索引,提升查询效率
nullable如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
default为这列定义默认值
default=datetime.now()默认为当前时间

enum举例


import enum
class MyEnum(enum.Enum):
    one = 1
    two = 2
    three = 3

t = Table(
    'data', MetaData(),
    Column('value', Enum(MyEnum))
)

connection.execute(t.insert(), {"value": MyEnum.two})
assert connection.scalar(t.select()) is MyEnum.two


5. 使用create_all() 同步表结构


  • 表结构没发生变化,再次执行不会报错
  • 修改模型属性,不同步表结构
  • 增加模型,同步表

数据迁移的应用:

  • django中,要使用数据迁移
  • flask可用可不用 create_all()
    • 用 少见,
    • 不用 先创建表和表结构
      • 创建模型 进行映射

django-》 makemigrations migrate


6. 使用配置文件的几种方法


① 所有的代码都写在一个py文件中使用


from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask(__name__)

## 学习sqlalchemy
## 连接数据库 sqlite3
BASE_DIR = os.path.abspath(os.path.dirname(__file__))##当前文件  项目所在根目录
app.config["SQLALCHEMY_DATABASE_URI"]="sqlite:///" + os.path.join(BASE_DIR,"test.db")  ## 链接sqlite3配置
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True  ## 请求结束之后自动提交
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True   ## 跟踪修改  flask 1.x 之后增加的配置项

db = SQLAlchemy(app)   ## 绑定flask项目

## 创建模型
class UserInfo(db.Model):
    ## 字段
    __tablename__ = "userinfo"   ##  指定表名
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32))
    time = db.Column(db.DATETIME)

## 数据迁移
db.create_all()   ## 同步表结构

@app.route("/")
def index():
    return "ORM测试"

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

② 封装settings配置文件


  • 第一种 直接编写
    应用: 比较直观,应用在小型的项目
    在这里插入图片描述
  • 第二种 编写配置文件
    应用:作为默认配置写在文件中
    settings.py
    在这里插入图片描述
	app.config.from_pyfile("settings.py")  ## 使用python文件做配置文件
  • 第三种 使用类对象
    应用:在项目中使用固定的配置
    在这里插入图片描述
  • 第四种 使用环境变量
    环境变量: 操作系统运行环境的时候需要的变量信息
    应用场景: 配置文件的地址不固定,配置文件私密
    在linux 中配置 export KEY = VALUE

配置环境变量DEBUG举例
在这里插入图片描述
报错
在这里插入图片描述
添加环境变量
在这里插入图片描述
在这里插入图片描述
完整的正确写法
在这里插入图片描述

silent: 决定加载环境变量的时候,是否报错

  • True 安静处理,如果没有对应的环境变量,忽略
  • False 不安静处理 当加载环境,没有对应环境变量的时候,报错

二、项目的优化


上面的代码,将视图和模型写在了一个文件当中,在工作中,不能够将模型和试图写在一个文件中,flask也是遵循MVC的设计模式,是一种解耦合

一般在项目中,创建子应用来方便管理项目 例如:
在这里插入图片描述


1. views视图


用来编写函数;大致部分如下:

  • 从封装好的py文件中导包,将使用到的导入
    在这里插入图片描述
  • 接受的各种请求处理函数
    在这里插入图片描述
  • 运行文件(可写可不写,可以直接通过终端来运行文件:通过封装好的方法)在这里插入图片描述

2. models 模型


from main import db
import datetime
class BaseModel(db.Model):
    ##
    __abstract__ = True    ###  声明当前类为抽象类,被继承 调用不会被创建
    id = db.Column(db.Integer,primary_key=True)
    def save(self):
        db.session.add(self)
        db.session.commit()
    def merge(self):
        db.session.merge(self)
        db.session.commit()
    def delete(self):
        db.session.delete(self)
        db.session.commit()


class UserInfo(BaseModel):
    __tablename__ = 'userinfo'     ## 表名
    # id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(32))
    age = db.Column(db.Integer)
    time = db.Column(db.DATETIME,default=datetime.datetime.now())  ## auto_now = True
class User(BaseModel):
    __tablename__ = "user"
    name = db.Column(db.String(32))
    phone = db.Column(db.String(11))
  • 基类:
    在这里插入图片描述
  • 其他类
    在这里插入图片描述

3. manage.py 封装如下(migrate和runserver)


在这里插入图片描述
通过判断来达到预期效果
在这里插入图片描述
修改后:
在这里插入图片描述

  • 在flask中有自带方法可以使我们更好的使用manage.py文件
    在这里插入图片描述

4. settings配置文件


在这里插入图片描述


5. main.py


主要用来和settings配合加载配置项和sqlalchemy绑定flask项目
在这里插入图片描述


三、 几种加载settings方式


# app.config.from_pyfile("settings.py")  ## 使用python文件做配置文件
# app.config.from_object("settings.TestConfig")
# app.config.from_envvar()  ## 环境变量中加载
# app.config.from_json()  ## 从json串中加载
# app.config.from_mapping()  ## mapping  ---> 字典类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值