python - Django 如何用数据迁移填充表?

标签 python django sqlite

我需要填充一个数据库表,并根据这个 post执行此操作的正确方法是使用数据迁移。

我有一个 aux 函数,我们称它为 get_my_values,它返回具有以下形状的字典:

{
    origin1: { key2: value2, key3: value3, ..., keyN: valueN },
    origin2: { key1: value1, key3: value3, ..., keyN: valueN },
    ...
    originN: { key1: value1, key2: value2, ..., keyN-1: valueN-1 },
}

例如:

{
  'ABC': { 'DEF': 1, 'GHI': 2 },
  'DEF': { 'ABC': 1, 'GHI': 3 },
  'GHI': { 'ABC': 2, 'DEF': 3 },
}

我要填充的表格具有以下形状:

ORIGIN | 'ABC'  | 'DEF' | 'GHI' |
 char  |  float | float | float |

所以,按照这个 post我创建了以下迁移:

from django.db import migrations
from myapp.utils import get_my_values


def populate_my_table(apps, schema_editor):
  Data = apps.get_model('myapp', 'Table')
  my_data_dict = get_my_values()
  for origin in my_data_dict.keys():
    # insert into Data.origin the current origin
    # if the Data.origin == Data.column, insert in this column the value 0
    # else, insert in each Data.column, the corresponding value from my_data_dict[origin]['column']


class Migration(migrations.Migration):

    dependencies = [
        ('myapp', 'the_table_migration'),
    ]

    operations = [
      migrations.RunPython(populate_my_table),
    ]

如您所见,我编写了一个伪代码来填充它。但我正在努力真正变成真正的代码。
最后,我希望这样的记录:

ORIGIN | ABC | DEF | GHI |
 ABC   | 0.0 | 1.0 | 2.0 |
 DEF   | 1.0 | 0.0 | 3.0 |
 GHI   | 2.0 | 3.0 | 0.0 |

最佳答案

def populate_my_table(apps, schema_editor):
    Data = apps.get_model('myapp', 'Table')
    my_data_dict = get_my_values()
    for origin, values in my_data_dict.items():
        data = {'origin': origin, origin: 0.0}
        data.update(values)
        Data.objects.create(**data)

关于python - Django 如何用数据迁移填充表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60161127/

相关文章:

python - Numpy 数组中与通配符的二维模式匹配

对作为输入子字符串的记录的 SQL 查询

c# - 在 Windows 8.1 (WinRT) 上调用 SQLite3.SetDirectory 会产生 System.AccessViolationException

c++ - 从嵌入式 python 打印到 cout

python - 蝗虫-Python-ssl.SSLError : [SSL] PEM lib (_ssl. c:4065)

python - 不在 Python 中过滤

django - 在 Django 模型中的 bool 字段上添加索引是一个好习惯吗

Python 解决方案允许通过电子邮件将照片上传到我的 Django 网站

sqlite - LIKE 语句可以优化成不做全表扫描吗?

Python 初学者(需要帮助) - 程序仅输出已保存列表的一个元素 (3.8.1)