Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SELECT等效项中的字段值创建Django对象_Django_Django Models_Sql Insert - Fatal编程技术网

使用SELECT等效项中的字段值创建Django对象

使用SELECT等效项中的字段值创建Django对象,django,django-models,sql-insert,Django,Django Models,Sql Insert,我正在试图找出如何使用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 如果我得到了正确的答案(不是我原来的查询;-),这将执行以下操作: 在表1中创建条目,其中

我正在试图找出如何使用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
如果我得到了正确的答案(不是我原来的查询;-),这将执行以下操作:

  • 表1
    中创建条目,其中
  • 名为
    table2\u id
    的字段将与
    table2
    中一行的
    id
    匹配,并且
  • 名为
    a_字段
    的字段将与
    a_字段
    中一行
    表3
    中的相同命名字段匹配,并且
  • 从中读取这些值的
    table2
    /
    table3
    对象由共享的
    table2.id
    /
    table3.table\u id2
    关系以及
    table2
    id
    标识为
    123

我不知道如何将这样的“计算”字段值传递给
create()
get\u或\u create()
style命令。使用
Q()
对象是否可能?

Django模型是一个ORM框架。 在某种程度上,你需要

  • 获取表2实体
  • 使用table2Entity和相关的table3Entity值构建新的table1Entity
  • 保存Table1实体

    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()
    
  • 或者只执行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''')