sqlalchemy + alembic数据迁移

安装用到的包

pip install pymysql

pip install sqlalchemy

pip install alembic

alembic和git类似,是一个版本控制的东西,执行它的命令,前面必须加alembic

写一个py文件,创建一个表

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

# 连接数据库
engine = create_engine('mysql+pymysql://root:7890@127.0.0.1:3306/p2p')


Base = declarative_base()

class My_Table(Base):
    # 表名
    __tablename__ = 'RRDXinPlanList'

    # 字段
    id = Column(String(20), primary_key=True)
    amount = Column(String(20))
    earnInterest = Column(String(20))
    expectedYearRate = Column(String(20))
    fundsUseRate = Column(String(20))
    planId = Column(String(20))
    name = Column(String(20))
    status = Column(String(20))
    subpointCountActual = Column(String(20))

PlanList.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)

以上代码执行后,就会创建数据表,接下来,我在逐行讲解一下具体的内容分别是什么,首先是引入了sessionmaker,Session的主要目的是建立与数据库的会话,它维护你加载和关联的所有数据库对象。它是数据库查询(Query)的一个入口。

在Sqlalchemy中,数据库的查询操作是通过Query对象来实现的。而Session提供了创建Query对象的接口

在我们创建了My_Table这个类以后,我们使用了 .metadata.create_all()这个方法,并将engine作为参数传入(engine是连接数据库的方法),你也可以直接使用父类Base的方式将多个表同时创建,例如Base.metadata.create_all(engine) 。 

接下来在来说My_Table 里面的内容,自己创建类继承自declarative_base()。在创建的时候,我们会默认给类加一个表名。(__tablename__)

alembic 初始化和配置

完成 pip 安装之后

  • 在 shell 里面 cd 到项目根目录执行

alembic init alembic
  • 用 pycharm 把生成的文件 download 回来(包括 alembic 目录和 alembic.ini

  • 修改 alembic.ini 设置数据库连接。

sqlalchemy.url = driver://user:pass@localhost/dbname
  • env.py 中设置,将target_metadata赋值成数据库的元数据(metadata)
    如果执行 revision 有 import 报错,注意是否正确将当前项目目录添加到 sys.path 路径

# 修改:
target_metadata=None
# 修改为:
# 方式1:
import os
import sys
root = os.path.dirname(__file__)+'/../../' # 定位到project根目录
print root
sys.path.append(root)
from myapp import db
target_metadata = db.metadata

# 方式2:
import sys                                             
from os.path import abspath, dirname                   
sys.path.append(dirname(dirname(abspath(__file__))))   
from modules.models import Base                        
target_metadata = Base.metadata

基于数据库 model 定义进行更新

将 model 定义好,并确认在 env.py 里导入的 Base 类是在 model 定义的地方的

  • 配置完成执行( -m “注释信息”,根据情况更改,会用到生成的py文件名字里)

    alembic revision -m “create_user_table”

    这里可以看到虚拟机目录在 alembic/versions 里生成了 py 文件,检查确认更新的内容,然后执行

    alembic upgrade head

    这样就会更新 mysql 数据库了

对于使用 FastAPI 和 SQLAlchemy 的应用程序,可以使用 Alembic 工具进行数据迁移。下面是一些基本步骤: 1. 安装 alembic 库:`pip install alembic` 2. 初始化 Alembic:`alembic init alembic` 这将在项目根目录下创建一个名为 alembic 的文件夹,其中包含 alembic.ini 配置文件和 versions 文件夹。 3. 编辑 alembic.ini 配置文件,指定数据库连接信息,例如: ``` sqlalchemy.url = driver://user:password@localhost/dbname ``` 4. 创建初始数据迁移脚本:`alembic revision -m "initial migration"` 这将在 versions 文件夹下创建一个名为 `xxxx_initial_migration.py` 的 Python 脚本,其中 `xxxx` 是时间戳。 5. 在该脚本中定义数据库模型和对应的 SQLAlchemy 表: ``` from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) name = Column(String) email = Column(String, unique=True, index=True) ``` 6. 运行数据迁移:`alembic upgrade head` 这将创建名为 users 的表。 7. 修改模型或添加新模型时,生成新的数据迁移脚本:`alembic revision -m "description"` 8. 在新脚本中添加相应的修改或新增操作。 9. 运行新的数据迁移:`alembic upgrade head` 这将应用新的数据库模式。 以上是一个基本的 FastAPI 和 SQLAlchemy 数据迁移流程。当然,具体的情况可能因为项目的具体情况而有所不同,但是以上步骤可以作为一个参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值