我正在尝试弄清楚如何使用 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
关系以及正在123
table2
id
标识。
我不明白如何将这种"计算"的字段值传递给create()
或get_or_create()
样式的命令。 这也许可以使用Q()
对象吗?
Django 模型是一个 ORM 框架。 以ORM的方式,您需要
- 获取表2实体
- 构造新表1具有表2实体和相关表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''')