Flask-sqlalchemy使用alembic迁移模型_示例2

Flask-sqlalchemy使用alembic迁移模型示例2

与示例1略有区别

区别在两个文件models.py和env.py

示例1里的models.py里的内容:

from sqlalchemy import Column,Integer,String,create_engine,Text
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
class User(Base):
    __tablename__ = 'tbUser'

    id = Column(Integer,primary_key=True)
    username = Column(String(20),nullable=False)
    password = Column(String(100),nullable=False)
    sex = Column(String(2),nullable=False)

class Article(Base):
    __tablename__ = 'tbArticle'

    id = Column(Integer,primary_key=True)
    title = Column(String(100),nullable=False)
    content = Column(Text, nullable=False)

示例2models.py里的内容:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
from apps import config
from apps.exts import db

class User(db.Model):
    __tablename__ = "tbuser"
    uid = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(50), nullable=False)
    _password = db.Column(db.String(100),nullable=False)
    addr = db.Column(db.String(30),nullable=False)

区别在于类名后括号里一个是Base,一个是db.Model

初始项目文件结构

1.从命令行进入项目文件夹,进入虚拟环境,输入指令:alembic init alembic

2.编辑alembic.ini

找到sqlalchemy.url = driver://user:pass@localhost/dbname

修改为:sqlalchemy.url = mysql+pymysql://root:123456@localhost/db_mytest

3.编辑alembicenv.py

增加下面语句

import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")

...

在下面找到target_metadata = None,在这句话前增加import apps.models,把target_metadata=None改为target_metadata=apps.models.db.Model.metadata

如下:

import apps.models
target_metadata = apps.models.db.Model.metadata

4.执行指令:alembic revision --autogenerate -m "first commit"

 正常情况下会在alembicversion文件夹下生成迁移文件

5.执行指令:alembic upgrade head

则把models.py里定义的表生成到数据库db_mytest里

6.注意事项,如果反复生成进行测试,请先把db_mytest里的表给清理掉

7.项目文件参考,如下:

链接:https://pan.baidu.com/s/12sk5jDo7R7uVnfLYSnE3qQ
提取码:2srb

 

原文地址:https://www.cnblogs.com/SH170706/p/13052686.html