本篇文章我们介绍在更改表结构后,如何对数据库进行迁移。
1.docker-compose.yml
首先挂载我们的迁移文件夹,以对迁移版本信息进行持久化。
1 2 3 4 5 6 7 8 9
| services: web: build: . privileged: true volumes: - ./data/migrations:/code/migrations ports: - "5000:5000" ...
|
2.apps/models/user.py
我们分别对user表进行了改、增、删字段的处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class User(db.Model): id = db.Column(db.Integer, primary_key=True) mobile = db.Column(EncType) username = db.Column(db.String(200)) password = db.Column(db.String(120)) age = db.Column(db.Integer) birth = db.Column(db.DateTime) photo = db.Column(db.String(120))
create_time = db.Column(db.DateTime, default=datetime.now) update_time = db.Column(db.DateTime, default=datetime.now)
__table_args__ = ( db.Index("index_mobile", mobile, mysql_length=16), )
|
3.执行迁移
我们需要进入flask容器执行迁移命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| docker exec -it flasktutorial_web_1 /bin/sh
flask db init
flask db migrate -m '2023-08-24 17:00 migrate' flask db upgrade
flask db downgrade
context.configure( ………… compare_type=True, compare_server_default=True, )
|
4.测试
我们进入mysql容器查看表结构,检查已经迁移成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mysql> use flask-demo; mysql> describe user; +-------------+--------------+------+-----+---------+----------------+ Field Type Null Key Default Extra +-------------+--------------+------+-----+---------+----------------+ id int(11) NO PRI NULL auto_increment mobile blob YES MUL NULL username varchar(200) YES NULL password varchar(120) YES NULL age int(11) YES NULL birth datetime YES NULL create_time datetime YES NULL update_time datetime YES NULL photo varchar(120) YES NULL +-------------+--------------+------+-----+---------+----------------+
|