mysql - 如何将两个django模型(表)合并为一个模型(表)

标签 mysql django database

我想合并两个 django 模型并创建单个模型。我们假设 我有第一个表 A,其中包含一些列和数据。

Table A
--------------
col1   col2    col3    col4
x1     x2      x3      x4
y1     y2      y3      y4

我还有另一个表 Table B,其中包含一些列和数据

Table B
--------------
col1   col2    col5    col6
x1     x2      p3      p4
y1     y2      p5      p6

在两个模型(表)中,我有几列(这里是两列)相似,也有几列不同。所以我想合并两个模型(表)并生成如下所示的内容:

Table C
-------------------------------------
col1    col2    col3    col4    col5    col6
x1      x2      x3      x4      p3      p4
y1      y2      y3      y4      p5      p6

我知道当我合并模型并运行 make migrate 时,django 肯定会创建一个迁移,迁移后我将能够创建上述结构,但我不想丢失我的数据,因为它将继续在 prod db 上。 使用数据库上的sql查询可以轻松完成,但如何使用django??? 预先感谢您的任何回复。

最佳答案

自定义迁移应该可以工作。

  1. 您已有模型 A 和 B,因此请使用这两个模型中所需的字段创建模型 C。
  2. 进行正常的架构迁移,例如manage.py makemigrations ...并应用任何现有更改
  3. 创建自定义迁移,例如python manage.py makemigrations --empty yourappname(请参阅@2ps共享的链接
  4. 编辑上面生成的文件,我在下面添加了示例数据迁移。
  5. rum manage.py migrate 以应用上述第 4 步中的迁移。
  6. 如果您愿意,可以删除模型 A 和 B,生成迁移并应用,这样就可以了。

    ...

    def merge_models_ab(apps, schema_editor):
        A = apps.get_model("app_name", "A")
        B = apps.get_model("app_name", "B")
        C = apps.get_model("app_name", "C")
        #come up with some interesting ways to join A and B
        #iterate over join and insert into C
        #C.objects.create(...)
    

    ...

    class Migrations(migrations.Migration):
        dependencies = [
            ('app_name', 'some_prev_migrations'),
        ]
        operations = [
            migrations.RunPython(merge_models_ab),
        ]
    

关于mysql - 如何将两个django模型(表)合并为一个模型(表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006144/

相关文章:

django - 使用 SSL 在 django 上进行 boto 存储的 URL 格式

python - Django : 'unicode' object has no attribute 'get'

mysql - 为多个表连接寻求优化的适当 mysql 查询

php - 正确参数化 mysqli 查询并打印多行

具有两个条件内联 SELECT 的 MySQL 查询

MySQL从一个表中选择,插入到另一个

database - 创建了用户,那么现在谁拥有创建的表?

mysql - 为什么我无法在 mysql/phpmyadmin 中存储时间戳?

django - 将 django south 与一组不同的数据库凭据一起使用

sql - 在 Redshift 中将时间戳转换为整数