python爬虫SQLAlchemy-数据迁移

sqlalchemy数据迁移常用的两种方法;
1.alembic
官方文档:https://alembic.sqlalchemy.org/en/latest/tutorial.html
github地址:https://github.com/sqlalchemy/alembic
2.sqlalchemy-migrate (已停止更新,不推荐使用)

models.py代码:

from sqlalchemy import Column, String, DateTime, Boolean, create_engine, Integer, Text, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
# relationship两个表之间的外键关系
from sqlalchemy.ext.declarative import declarative_base
from alembic import op

# 创建对象的基类:
Base = declarative_base()


# 定义表对象
class GovernmentIndex(Base):
    # 定义数据库表名
    __tablename__ = 'government_index'

    # 表的结构 参数参照上面表单
    gid = Column(Integer(), primary_key=True, comment='主键ID')
    government_url = Column(String(50), comment="政府网站")
    judgment_final = Column(Boolean(), comment='单项否决最终结果判断!')
    fraction_result = Column(Integer(), comment='最终分数')
    edit_time = Column(DateTime,comment='最后编辑的时间')

    def __repr__(self):
        return self.government_url
    # __repr__() 是一个非常特殊的方法,它是一个“自我描述”的方法,该方法通常用于实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。



class JudgmentData(Base):
    __tablename__ = 'judgment_data'
    jid = Column(Integer(), primary_key=True, comment='主键ID')
    matter_name = Column(String(50), comment='事项名称')
    matter_status = Column(String(50), comment='事项状态')
    judgment_result = Column(Boolean(), comment='判断结果')
    error_content = Column(String(255), comment='错误内容')
    photo_name = Column(String(50), comment='截图名称')
    ago_photo_name = Column(String(50), comment='检测时间点之前的图片名称')
    edit_time = Column(DateTime(), comment='最后修改数据的时间')
    artificial_results = Column(String(50), comment='人工复核结果')
    g_id = Column(Integer, ForeignKey('government_index.gid'))
    def __repr__(self):
        return self.matter_name


class MinusPoints(Base):
    __tablename__ = "minus_points"

    mid = Column(Integer(), primary_key=True, comment='主键ID')
    matter_name = Column(String(50), comment='事项名称')
    matter_status = Column(String(50), comment='事项状态')
    fraction_minus = Column(Integer(), comment='扣分分数')
    minus_content = Column(String(255), comment='扣分内容')
    photo_name = Column(String(50), comment='截图名称')
    ago_photo_name = Column(String(50), comment='检测时间点之前的图片名称')
    edit_time = Column(DateTime(), comment='最后修改数据的时间')
    artificial_results = Column(String(50), comment='人工复核结果')
    g_id = Column(Integer, ForeignKey('government_index.gid'))
    def __repr__(self):
        return self.matter_name


class AddPoints(Base):
    __tablename__ = 'add_points'

    aid = Column(Integer(), primary_key=True, comment='主键ID')
    matter_name = Column(String(50), comment='事项名称')
    matter_status = Column(String(50), comment='事项状态')
    fraction_add = Column(Integer(), comment='加分分数')
    add_content = Column(String(255), comment='加分内容')
    photo_name = Column(String(50), comment='截图名称')
    ago_photo_name = Column(String(50), comment='检测时间点之前的图片名称')
    edit_time = Column(DateTime(), comment='最后修改数据的时间')
    artificial_results = Column(String(50), comment='人工复核结果')
    g_id = Column(Integer, ForeignKey('government_index.gid'))
    def __repr__(self):
        return self.matter_name

alembic基本使用

安装:

pip install alembic

cd 到你创建models.py的目录下执行下面命令:

alembic init migrations

migrations 仓库名可以自定义。
在这里插入图片描述

在这里插入图片描述

修改配置文件

在 alembic.ini 中设置数据库的连接, sqlalchemy.url =driver://user:pass@localhost/dbname ,比如以 mysql 数据库为例,则配置后的代码为:

sqlalchemy.url = mysql+pymysql://root:123456@127.0.0.1:3306/web_inspect

在这里插入图片描述
找到env.py:
添加代码:

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

如图:
在这里插入图片描述
找到:target_metadata = None 替换成 target_metadata = Base.metadata;
如图:
在这里插入图片描述
如果models有红色波浪线 飘红 找到项目文件夹点击右键,操作如图:
在这里插入图片描述
在这里插入图片描述

生成迁移文件
alembic revision --autogenerate -m "v1" 将当前模型中的状态生成迁移文件

命令和参数解释:

init:创建一个 alembic 仓库。
revision:创建一个新的版本文件。
--autogenerate:自动将当前模型的修改,生成迁移脚本。
-m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的 upgrade 函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
[head]:代表最新的迁移脚本的版本号。
downgrade:会执行指定版本的迁移文件中的 downgrade 函数。
heads:展示head指向的脚本文件版本号。
history:列出所有的迁移版本及其信息。
current:展示当前数据库中的版本号。另外,在你第一次执行 upgrade 的时候,就会在数据库中创建一个名叫 alembic_version 表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。
更新到数据库

命令:

alembic upgrade head

如果要降级,那么使用

alembic downgrade head

具体其他操作,参考官方文档:
官方文档:https://alembic.sqlalchemy.org/en/latest/tutorial.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值