1、项目准备信息
项目结构
1、首先在db.database.py 文件下配置数据库信息,代码如下
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# SQLALCHEMY_DATABASE_URL = "sqlite:///./db.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:mysql@192.168.12.154:3306/kinit?charset=utf8mb4"
engine = create_engine(
SQLALCHEMY_DATABASE_URL
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
2、在db.base_class.py 文件中定义Base 类
from typing import Any
from sqlalchemy.ext.declarative import as_declarative, declared_attr
@as_declarative()
class Base:
id: Any
__name__: str
# Generate __tablename__ automatically
@declared_attr
def __tablename__(cls) -> str:
return cls.__name__.lower()
3、在db.models.py 文件中定义模型类
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from db.base_class import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True, comment="id")
email = Column(String(50), unique=True, index=True, comment="邮箱")
hashed_password = Column(String(50), comment="密码")
is_active = Column(Boolean, default=True, comment="状态")
items = relationship("Item", back_populates="owner")
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True, index=True, comment="id")
title = Column(String(50), index=True, comment="标题")
description = Column(String(50), index=True, comment="描述")
owner_id = Column(Integer, ForeignKey("users.id"), comment="user_id")
owner = relationship("User", back_populates="items")
4、编写db.base.py文件,导入需要迁移的模型类和Base类即可
from .models import User, Item
from .base_class import Base
迁移
ALembic使用教程:
1、将定义的模型导入至db.__init__.py 文件中,不做其他修改即可
2、在自己的python项目环境中安装alembic。
pip install alembic
3、对alembic进行初始化。
对alembic进行初始化。
注:最后一个alembic为生成文件的名字
特别注意:进行初始化的时候与项目的app文件是同级。
初始化后会生成一个alembic的文件夹和一个alembic.ini的文件,如图:
4、修改alembic.ini文件
修改 sqlalchemy.url 项
sqlalchemy.url = mysql+pymysql://root:pwd@127.0.0.1/db_name
5、修改alembic>env.py文件。
from db.base import Base
target_metadata = Base.metadata
6、使用命令alembic revision --autogenerate -m "备注",生成当前的版本
alembic revision --autogenerate -m "init"
7、使用命令alembic upgrade head将alembic的版本更新到最新版,然后数据库中就有user表了
alembic upgrade head
ps: 具体教程请参考 alembic 官方文档