flask配置

本文介绍了在Flask项目中配置数据库所需的第三方包,如flask-script、pymysql、flask-sqlalchemy和flask-migrate。详细阐述了settings文件配置、模型创建、数据库迁移的步骤,包括初始化、迁移和升级。同时,提到了如何在模型更改后进行数据库迁移,以及如何降级数据库版本。

一、所需要安装的第三方包

flask-script
pymysql   数据库
flask-sqlalchemy    实现ORM映射
flask-migrate    发布命令工具

 

二、项目settings文件配置

class Config:
    DEBUG = True
    # mysql+pymysql(驱动)://用户名:密码@ip地址:port/数据库名
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:admin@127.0.0.1:3306/flask_test'
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。
    SQLALCHEMY_ECHO = True  # 如果设置为 Ture , SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。


class DevelopmentConfig(Config):  #开发版本
    ENV = 'development'


class ProductionConfig(Config):   #生产版本
    ENV = 'production'
    DDEBUG = False

三、创建模型

from datetime import datetime

from ext import db


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    userName = db.Column(db.String(15), nullable=False)
    password = db.Column(db.String(15), nullable=False)
    phone = db.Column(db.String(11), unique=True)  #unique设置不能重复
    createTime = db.Column(db.DateTime, default=datetime.now)

    def __str__(self):
        return self.userName + "===" + self.password

    def __repr__(self):
        self.__str__()

四、模型创建完后,一定要记得在app.py中导入这个模型,否则,数据库不能迁移

from apps import create_app
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager

from ext import db
import apps.user.models


app = create_app()

manager = Manager(app=app)

# 命令工具
migrate = Migrate(app=app, db=db)  # 作用: 影响数据库的映射
manager.add_command('db', MigrateCommand)  # 作用: 将命令交给manager管理, 和 @manager.command作用类似

# @manager.command
# def init():
#     print('初始化')

if __name__ == '__main__':
    manager.run()  # python app.py runserver -h 0.0.0.0 -p 8000   # -p -h 可选,设置ip和端口

五、数据库迁移
python app.py db init       生成migrations文件夹
python app.py db migrate       执行迁移,产生一个版本文件
python app.py db upgrade       同步到数据库中,生成模型对应的表

 

六、如果后期修改模型或增加模型,只需要执行下面两个命令,不用再执行init,init只执行一次

python app.py db migrate
python app.py db upgrade

 

七、降级数据库版本

python app.py db downgrade     #会降低数据库版本,并删除对应的表

<think> 我们正在处理关于MCAL(Microcontroller Abstraction Layer)中Code Flash的配置方法的问题。根据提供的引用,我们可以提取以下关键信息: 1. 引用[1]提到Flash访问代码不能存储在被操作的Flash物理块中,即在执行擦除或写入操作时,代码不能位于同一Flash块中,因为此时Flash处于读操作状态,无法同时进行擦写。 2. 引用[2]展示了一个初始化函数`FLASH_HAL_Init`,其中调用了`C40_Ip_StartSequenceInit`和`C40_Ip_Init`函数来初始化Flash驱动。这里提到了获取Flash驱动程序的地址信息,并初始化序列。 3. 引用[3]提到DMA控制器的配置因微控制器和系统架构而异,需要参考硬件手册。 根据这些信息,配置MCAL的Code Flash通常涉及以下几个步骤: ### 1. **理解Flash存储器的结构** - 需要了解目标微控制器的Flash存储器结构,包括扇区/页的大小、地址范围等。这是因为不同的扇区可能用于存储代码、数据或配置信息。 ### 2. **配置Flash驱动程序** - 在MCAL中,通常会有一个Flash驱动模块(例如Fls)负责提供擦除、写入等操作的接口。配置Flash驱动需要指定其运行的位置(RAM中),以避免在执行Flash操作时访问同一Flash块(引用[1])。 - 如引用[2]所示,初始化过程中需要获取Flash驱动程序的地址(位于Flash中),然后将其复制到RAM中,并在RAM中执行。这是因为在擦除或写入Flash时,不能从同一Flash块中取指令。 ### 3. **初始化序列** - 在初始化函数中(如`FLASH_HAL_Init`),通常会执行以下步骤: - 获取Flash驱动程序的起始地址和结束地址(位于Flash中)。 - 调用初始化序列函数(如`C40_Ip_StartSequenceInit`)将Flash中的驱动程序复制到RAM中,并设置好运行环境。 - 初始化Flash驱动模块(如`C40_Ip_Init`),传递配置结构体(包含擦除、写入等操作的配置参数)。 ### 4. **配置DMA(如果需要)** - 如果使用DMA来加速Flash操作(例如数据传输),则需要根据硬件手册配置DMA控制器(引用[3])。但Flash操作本身通常不直接使用DMA,因为Flash操作是直接由Flash控制器管理的。 ### 5. **编写配置代码** - 根据MCAL的规范,配置Flash驱动模块。例如,在AUTOSAR架构中,Fls模块的配置包括: - 定义Fls配置集(FlsConfigSet),包括扇区大小、地址、时钟频率等。 - 定义Fls的作业(Job)和队列(Queue)机制,以管理多个Flash操作。 - 配置Fls的访问模式(如正常模式、快速模式等)。 ### 示例配置步骤(基于引用[2]的代码片段): ```c /* 获取Flash驱动程序在Flash中的地址 */ uint32 FlashDriverAddrStart, FlashDriverEndAddr; FLASH_HAL_GetFlashDriverInfo(&FlashDriverAddrStart, &FlashDriverEndAddr); /* 将Flash驱动程序复制到RAM并初始化序列(以便在RAM中执行) */ C40_Ip_StartSequenceInit((uint8*)(FlashDriverAddrStart)); /* 初始化Flash驱动模块,传递配置结构体 */ C40_Ip_Init(&FlsConfigSet_InitCfg); ``` 其中,`FlsConfigSet_InitCfg`是一个预定义的配置结构体,包含Flash操作所需的参数,例如: - 时钟配置 - 读写等待状态 - 擦除/写入超时时间 - 扇区布局等 ### 注意事项: - 确保在操作Flash(擦除、写入)时,中断被正确处理,避免在关键操作中被中断。 - 操作Flash前需要禁用全局中断,操作完成后恢复。 - 遵循微控制器的特定序列来解锁Flash并执行操作。 由于不同厂商的MCAL实现可能不同,建议参考具体的MCAL文档和微控制器的参考手册。 §§相关问题§§ 1. 如何确定Flash驱动程序在RAM中的运行地址? 2. 在AUTOSAR架构中,Fls模块的配置参数有哪些? 3. 如何确保Flash操作(如擦除)的原子性? </think> ### MCAL Code Flash配置方法 在嵌入式系统中配置MCAL(Microcontroller Abstraction Layer)的Code Flash需要遵循特定的硬件约束和软件设计原则,以下是关键配置步骤和注意事项: #### 1. **地址空间配置** - **关键原则**:Flash操作代码不能存储在待操作的物理块中(如擦除/写入时)[^1] - 配置方法: ```c /* 获取Flash驱动程序的地址范围 */ uint32 FlashDriverAddrStart, FlashDriverEndAddr; FLASH_HAL_GetFlashDriverInfo(&FlashDriverAddrStart, &FlashDriverEndAddr); /* 确保操作代码在RAM中执行 */ C40_Ip_StartSequenceInit((uint8*)(FlashDriverAddrStart)); ``` #### 2. **初始化序列配置** - 使用MCAL提供的初始化API加载驱动: ```c void FLASH_HAL_Init(void) { /* 初始化Flash操作序列 */ C40_Ip_Init(&FlsConfigSet_InitCfg); // MCAL专用配置结构体 /* 添加其他外设初始化 */ } ``` #### 3. **操作约束处理** - **擦除/写入时**: - 必须从RAM执行操作代码 - 禁止中断响应 - 示例保护机制: ```c DISABLE_INTERRUPTS(); FLASH_HAL_EraseSector(sector_addr); // RAM中执行的函数 ENABLE_INTERRUPTS(); ``` #### 4. **DMA协同配置** - 使用DMA加速数据传输时[^3]: ```c /* 配置DMA通道 */ Dma_ChannelConfigType dmaConfig = { .source = data_buffer, .destination = FLASH_WRITE_ADDR, .transferSize = DATA_LEN }; Dma_SetupTransfer(DMA_CH0, &dmaConfig); ``` #### 5. **扇区管理** - 典型扇区配置表: | 扇区地址范围 | 大小 | 用途 | |------------------|--------|---------------| | 0x0000_0000-0x3FFF | 16KB | Bootloader | | 0x4000_0000-0x7FFF | 16KB | 应用程序分区1 | | 0x8000_0000-0xBFFF | 16KB | 应用程序分区2 | #### 注意事项: 1. 始终通过MCAL API操作Flash,避免直接寄存器访问 2. 写操作前必须先擦除目标扇区 3. 配置等待状态(Wait States)匹配CPU时钟频率 4. 启用ECC校验(如有): ```c FlsConfigSet_InitCfg.eccEnable = TRUE; ``` > **重要提示**:具体配置参数需参考芯片数据手册和MCAL文档,不同厂商(如NXP、Infineon)的实现存在差异[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值