程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Creating seed data in a flask-migrate or alembic migration大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决CreaTing seed data in a flask-migrate or alembic migration?

开发过程中遇到CreaTing seed data in a flask-migrate or alembic migration的问题如何解决?下面主要结合日常开发的经验,给出你关于CreaTing seed data in a flask-migrate or alembic migration的解决方法建议,希望对你解决CreaTing seed data in a flask-migrate or alembic migration有所启发或帮助;

Alembic作为其操作之一bulk_insert()。该文档提供了以下示例(包含一些我已修复的问题):

from datetiR_135_11845@e import date
from sqlalchemy.sql import table, column
from sqlalchemy import String, Integer, Date
from alembic import op

# Create an ad-hoc table to use for the insert statement.
accounts_table = table('account',
    column('ID', Integer),
    column('name', String),
    column('create_date', DatE)
)

op.bulk_insert(accounts_table,
    [
        {'ID':1, 'name':'John Smith',
                'create_date':date(2010, 10, 5)},
        {'ID':2, 'name':'Ed Williams',
                'create_date':date(2007, 5, 27)},
        {'ID':3, 'name':'Wendy Jones',
                'create_date':date(2008, 8, 15)},
    ]
)

还要注意,Alembic具有一个execute()操作,就像execute()sqlAlchemy中的普通功能:你可以运行所需的任何sql,如文档示例所示:

from sqlalchemy.sql import table, column
from sqlalchemy import String
from alembic import op

account = table('account',
    column('name', String)
)
op.execute(
    account.update().\
        where(account.c.name==op.inline_literal('account 1')).\
        values({'name':op.inline_literal('account 2')})
        )

请注意,用于创建update语句中使用的元数据的表是直接在架构中定义的。这似乎打破了DRY(不是你的应用程序中已经定义的表),但实际上是非常必要的。如果要尝试使用应用程序中的表或模型定义,则在对应用程序中的表/模型进行更改时,将中断此迁移。你的迁移脚本应该一成不变:对模型的未来版本进行的更改不应更改迁移脚本。使用应用程序模型将意味着定义将根据你检出的模型版本(最可能是最新版本)而改变。因此,你需要表定义在迁移脚本中是自包含的。

要讨论的另一件事是,是否应将种子数据放入作为自己的命令运行的脚本中(例如,使用Flask-Script命令,如其他答案所示)。可以使用此方法,但是你应该对此小心。如果要加载的数据是测试数据,那是一回事。但是我已经理解“种子数据”是指应用程序正常工作所需的数据。例如,如果你需要在“角色”表中设置“管理员”和“用户”的记录。该数据应作为迁移的一部分插入。请记住,脚本仅适用于数据库的最新版本,而迁移将适用于要迁移到的或从其中迁移的特定版本。如果你希望脚本加载角色信息,

同样,依靠脚本,你将在迁移之间运行脚本变得更加困难(例如,迁移3-> 4要求初始迁移中的种子数据位于数据库中)。现在,你需要修改Alembic的默认运行方式以运行这些脚本。而且,这些脚本仍会随着时间的推移而改变,并且谁知道你已经从源代码管理中签出了哪个版本的应用程序,这一事实仍然不能忽略。

解决方法

如何在第一次迁移中插入一些种子数据?如果迁移不是最佳选择,那么最佳实践是什么?

"""empty message

Revision ID: 384cfaaaa0be
Revises: None
Create Date: 2013-10-11 16:36:34.696069

"""

# revision identifiers,used by Alembic.
revision = '384cfaaaa0be'
down_revision = None

from alembic import op
import sqlalchemy as sa


def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('list_type',sa.column('id',sa.Integer(),nullable=False),sa.column('name',sa.String(length=80),sa.primaryKeyConsTraint('id'),sa.UniqueConsTraint('name')
    )
    op.create_table('job',sa.column('list_type_id',sa.column('record_count',sa.column('status',sa.column('sf_@R_74_6186@',sa.column('created_at',sa.datetiR_135_11845@e(),sa.column('compressed_csv',sa.LargeBinary(),nullable=TruE),sa.ForeignKeyConsTraint(['list_type_id'],['list_type.id'],),sa.primaryKeyConsTraint('id')
    )
    ### end Alembic commands ###

    # ==> INSERT SEED DATA HERE <==


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('job')
    op.drop_table('list_type')
    ### end Alembic commands ###

大佬总结

以上是大佬教程为你收集整理的Creating seed data in a flask-migrate or alembic migration全部内容,希望文章能够帮你解决Creating seed data in a flask-migrate or alembic migration所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。