【问题标题】:Can the South (for Django) insert rows of data into database?南方(对于 Django)可以将数据行插入数据库吗?
【发布时间】:2012-08-05 18:35:28
【问题描述】:

我想创建一个表,然后创建一个应该插入到该表中的数据列表。南方有能力做这种事吗?如果是这样,你有什么参考可以告诉我如何做到这一点?

我希望能够做到这一点,因为在这一点上,拥有“完全相同”数据的唯一方法似乎是自己手动将它们插入数据库。

我想要一些在表格中插入行的“好”自动化方式。

【问题讨论】:

    标签: python mysql django django-south insertion


    【解决方案1】:

    你可以!它被称为"data migration"

    很多时候你可能想要使用一个:上面的链接给出了一个很好的例子,另一个是"data migration for every Django project"

    from south.v2 import DataMigration
    from django.conf import settings
    
    class Migration(DataMigration):
    
        def forwards(self, orm):
            Site = orm['sites.Site']
            site = Site.objects.get(id=settings.SITE_ID)
            site.domain = settings.DOMAIN_NAME
            site.name = settings.SITE_NAME
            site.save()
    

    (这会从settings.py 中获取域名和站点名称,用于sites framework

    【讨论】:

    • 在某些情况下,作为设置初始数据的一种方式,South 数据迁移比夹具更好。夹具要么需要手动执行(使用 loaddata),要么,如果命名为 initial_data.json,则在每次运行 syncdb 时自动插入到您的数据库中。根据我的经验,syncdb 经常运行,但是如果您创建数据迁移,它应该只在每个数据库运行一次,在您运行 manage.py migrate 时自动运行。
    • 对了,你给谁转储了大量的set数据?什么格式,SQL?这很难看,因为您首先必须以某种方式将数据放入数据库。假设我有一个电子表格...?
    • @CpILL 您可以使用夹具、数据库转储或直接导入电子表格的manage.py 命令。 South 的这个解决方案仅适用于应该存在于代码库中的小插入。
    【解决方案2】:

    您想使用fixtures

    1. 在您的应用文件夹中创建一个fixtures 目录。
    2. 在该文件夹中创建字典文件 intial_data.json(或 XML/YAML)
    3. 用您要插入的数据填充文件。 Example
    4. 运行manage.py loaddata <fixturename>,其中<fixturename> 是您创建的夹具文件的名称。

    South 以几乎相同的方式处理此问题,但似乎 Django 的核心方法更有文档记录。

    【讨论】:

    • 也可以直接使用SQL语句。
    • 或者您可以创建数据迁移。 python manage.py datamigration app_label migration_name
    • 我认为夹具更符合我的要求。不过,你能告诉我为什么它必须采用“myapp.table_name”的格式而不是“table_name”吗?
    • @Apothem 我相信这是因为 Django 需要找到特定的 SQL 文件来挂钩。因此它知道在myapp 文件夹中查找与模型/表关联的必要SQL 文件。不过我可能是错的。
    • JSON、XML、CSV 这些是数据通常采用的格式,而不是 SQL。数据迁移需要接受这一点,并提供一个简单的解决方案来处理这些
    猜你喜欢
    • 2014-07-15
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2014-11-13
    • 2021-10-18
    相关资源
    最近更新 更多