创建一个 Django 对象,其中包含来自 SELECT 等效项的字段值



我正在尝试弄清楚如何使用 Django 重现以下内容 - 有人帮忙吗?

INSERT INTO table1 (table2_id, a_field)
SELECT table2.id as table2_id, table3.a_field
FROM table2
INNER JOIN table3 ON
table3.table2_id == table2.id
WHERE table2.id = 123

如果我有正确的(不是我的原始查询;-( (,这是执行以下操作:

  • table1中创建一个条目,其中...
  • 名为table2_id的字段将与table2和 中的行id匹配
  • 名为a_field的字段将与a_field中的相同命名字段匹配一行table3
  • 从中读取这些值的table2/table3对象由共享的table2.id/table3.table_id2关系以及正在123table2id标识。

我不明白如何将这种"计算"的字段值传递给create()get_or_create()样式的命令。 这也许可以使用Q()对象吗?

Django 模型是一个 ORM 框架。 以ORM的方式,您需要

  1. 获取表2实体
  2. 构造新表1具有表2实体和相关表3实体值的实体
  3. 保存表1实体

    def batch_save_entity2():
    entity2 = Table2Entity.objects.get('123')
    entity1 = Table1Entity()
    entity1.table2_id = entity2.id
    entity1.a_field = entity2.entity3.a_field
    entity1.save()
    

或者只是在没有ORM的情况下直接执行sql

from django.db import connection
def my_custom_sql(self):
with connection.cursor() as cursor:
cursor.execute('''
INSERT INTO table1 (table2_id, a_field)
SELECT table2.id as table2_id, table3.a_field
FROM table2
INNER JOIN table3 ON
table3.table2_id == table2.id
WHERE table2.id = 123''')

最新更新