3月9日项目问题

IntYou (^_^)

读取yaml

引用from ruamel import yaml

1
2
3
4
yaml.load(
Path('C:\\Users\\Lenovo\\Desktop\\bot\\IntBot\\configs\\config.yaml').read_text(encoding='utf-8'),
Loader=yaml.Loader
)

pydantic

extra='ignore'忽略额外属性

flask-migrate数据迁移

因为在开发中,由于数据表模型的改动,数据经常被清除,因此可以使用数据迁移,保存旧数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
# 设置数据库连接地址
DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 是否追踪数据库修改,一般不开启, 会影响性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 是否显示底层执行的SQL语句
app.config['SQLALCHEMY_ECHO'] = True

# 初始化db,关联flask 项目
db = SQLAlchemy(app)
# 迁移组件初始化
Migrate(app, db)

# 创建模型
class Students(db.Model):
__tablename__ = 'students' # 数据库表名

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
fullname = db.Column(db.String(30))
nickname = db.Column(db.String(30))

def __repr__(self):
return f"<Students(name='{self.name}', fullname='{self.fullname}', nickname='{self.nickname}')>"

class Users(db.Model):
__tablename__ = 'user' # 数据库表名

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))

def __repr__(self):
return f"<Users(id='{self.id}', name='{self.name}')>"

执行迁移命令,先设置环境变量, 如果启动文件是app.py 这步可以省略。

1
set FLASK_APP=app.py  # 设置环境变量指定启动文件

windows用set设置环境变量,linux 用export 设置环境变量

1
export FLASK_APP=app.py  # 设置环境变量指定启动文件

执行相关命令

1
2
3
flask db init  # 生成迁移文件夹  只执行一次
flask db migrate # ⽣成迁移版本, 保存到迁移文件夹中
flask db upgrade # 执行迁移

迁移命令

init 命令执行后,会生成migrations目录

1
flask db init

migrate 命令生成迁移脚本,保存到迁移文件夹中versions目录

1
flask db migrate

upgrade 命令执行迁移

1
flask db upgrade

执行完upgrade 命令才会在数据库中生成表

虚拟环境直接复制迁移

  1. 迁移到新电脑,将 虚拟环境文件夹内的pyvenv.cfg文件中home参数,写成新电脑python的路径

  2. 修改虚拟环境文件夹中Scripts中的activate内VIRTUAL_ENV参数修改成新电脑虚拟环境文件夹路径

  3. 修改虚拟文件夹中Scripts中的activate.bat内set “VIRTUAL_ENV参数改成新电脑虚拟环境文件夹路径

  • 标题: 3月9日项目问题
  • 作者: IntYou
  • 创建于: 2023-03-09 12:24:47
  • 更新于: 2023-03-24 21:38:46
  • 链接: https://intyou.netlify.app/2023/03/09/3月9日项目问题/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。