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:[email protected]: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 数据库了

猜你喜欢

转载自blog.csdn.net/qq_15260769/article/details/83003769