首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在django中创建临时表而不丢失ORM?

如何在django中创建临时表而不丢失ORM?
EN

Stack Overflow用户
提问于 2013-11-22 06:26:14
回答 2查看 10.1K关注 0票数 7

我很好奇如何在django中创建一个临时表?(数据库为mysql,客户端要求)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TEMPORARY TABLE somewhat_like_a_cache AS
(SELECT * FROM expensive_query_with_multiple_joins);
SELECT * FROM somewhat_like_a_cache LIMIT 1000 OFFSET X;

这背后的原因是:结果集相当大,我必须迭代它。代价高昂的查询大约需要30秒。在没有临时表的情况下,我给数据库服务器增加了几个小时的压力。使用临时表,开销很大的查询只执行一次,之后在分片迭代临时表的成本很低。

这不是How do I create a temporary table to sort the same column by two criteria using Django's ORM?的副本。作者只想按两列排序。

EN

回答 2

Stack Overflow用户

发布于 2013-11-28 10:07:46

我已经解决了这个问题,并且我构建了一个函数来将模型同步到数据库(改编自管理脚本syncdb

您可以在代码中的任何位置编写临时模型,甚至可以在运行时生成模型,然后调用sync_models。尽情享受ORM

顺便说一句,它的数据库是独立的,可以与任何支持django的数据库后端一起使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import connection
from django.test import TestCase
from django.core.management.color import no_style
from importlib import import_module


def sync_models(model_list):
    '''
    Create the database tables for given models.
    '''
    tables = connection.introspection.table_names()
    seen_models = connection.introspection.installed_models(tables)
    created_models = set()
    pending_references = {}
    cursor = connection.cursor()
    for model in model_list:
        # Create the model's database table, if it doesn't already exist.
        sql, references = connection.creation.sql_create_model(model, no_style(), seen_models)
        seen_models.add(model)
        created_models.add(model)
        for refto, refs in references.items():
            pending_references.setdefault(refto, []).extend(refs)
            if refto in seen_models:
                sql.extend(connection.creation.sql_for_pending_references(refto, no_style(), pending_references))
        sql.extend(connection.creation.sql_for_pending_references(model, no_style(), pending_references))
        for statement in sql:
            cursor.execute(statement)
        tables.append(connection.introspection.table_name_converter(model._meta.db_table))
票数 6
EN

Stack Overflow用户

发布于 2013-11-25 12:58:22

我在Postgresql中测试了以下内容(也很少使用),但我认为您不会有任何问题。

Django还提供了一个使用connection执行自定义SQL查询(INSERT, UPDATE, CREATE, DROP等)的应用编程接口。关于用法的Here is the documentation

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import connection, transaction
cursor = connection.cursor() #  create the cursor

cursor.execute("CREATE TEMPORARY TABLE test_table (code char(5)  PRIMARY KEY,
                                                   title varchar(40) NOT NULL);")
cursor.execute("INSERT into test_table (code, title) values ('ABVCD', 'This is my Title');")
cursor.execute("select * from test_table;") #  now select all data in our table
print cursor.fetchall() # and fetch them all
cursor.close()  # if you wish to close it

这是我用jPostgreSQL9.1测试的示例代码,但是如果执行适合您的DBMS版本的查询,就不会有任何问题。

使用TEMPORARY表或创建普通表并在完成工作后执行drop语句由您决定。但在开始之前先阅读文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20138428

复制
相关文章
django操作非ORM创建的表
django--ORM连接已存在的表 问题: django的ORM怎么连接已存在的表,然后进行增删查改操作? 工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,
py3study
2018/08/03
1.7K0
临时表创建_临时表的创建方式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
3.4K0
Django ORM 单表操作
返回的是 QuerySet 类型数据,类似于 list,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象;
HammerZe
2022/03/25
1.3K0
Django ORM 单表操作
Oracle创建表空间和创建临时表空间
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157622.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/18
3.4K0
Django ORM 查询表中某列字段值
方式一获取到的是一个QuerySet,内容是键值对构成的,键为表的列名,值为对应的每个值。
BigYoung小站
2020/05/04
3.7K0
mysql创建临时表,将查询结果插入已有表中
        今天遇到一个很棘手的问题,想临时存起来一部分数据,然后再读取。我记得学数据库理论课老师说可以创建临时表,不知道mysql有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些。然后还需要将查询的结果存储到临时表中。下面是创建临时表以及插入数据的例子,以供大家参考。 A、临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表: 1)定义字段   CREATE TEMPORARY TABLE tmp_table (       name VAR
苦咖啡
2018/05/07
9.9K0
如何在Java中创建临时文件?
在Java程序中,有时需要创建临时文件来暂存数据或者执行某些操作。Java提供了许多方式来创建临时文件。在本教程中,我们将介绍如何使用Java标准库来创建临时文件。
网络技术联盟站
2023/04/19
1.8K0
如何在Java中创建临时文件?
Django中ORM操作
Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可;
緣來
2020/01/02
4.8K0
Django的ORM操作-创建数据
基本操作包括增删改查(CRUD)即Create、Read、Update、Delete
Yuou
2022/09/26
4850
Django之ORM 单表查询(二)
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。
小团子
2019/07/18
4590
Django之ORM 单表查询(二)
django--ORM的单表操作
它的作用相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件
py3study
2018/08/03
1K0
Django进阶-3-ORM单表
orm操作可以使用类实例化,obj.save的方式,也可以使用create()的形式
小团子
2019/07/18
1.4K0
Django进阶-3-ORM单表
PostgreSQL创建临时表性能下降分析
环境信息 PostgreSQL 11.5 问题 客户反馈临时表创建耗时较长,平均耗时在5ms以上,相对于之前测试阶段的创建时间有明显变慢。 根本原因 postgresql在创建表时,会预估当前表是否存在超长记录的可能,如果使用了text,varchar(555)等超大字端,会在创建表同时创建toast表及toast索引表,同时多字段会写入系统表记录,这将增大创建表的开销。 诊断步骤 psql postgres=# select count(*) from pg_class; count -------
忽而呀嘿
2020/06/08
2.5K0
如何在 Django 中创建抽象模型类?
Django 中的抽象模型类是一个模型,它用作其他模型继承的模板,而不是一个旨在创建或保存到数据库的模型。在应用程序中,可以使用抽象模型定义多个模型共享的相似字段和行为。使用 Django,您可以定义一个派生自 Django.db.models 的模型类,以建立一个抽象模型类。
很酷的站长
2023/08/11
2510
如何在 Django 中创建抽象模型类?
Django ORM (一) 创建数据库
创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上创建数据库结构 from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name="名称") address = models.Ch
py3study
2020/01/16
1.4K0
36 | 临时表和临时表
由于临时表只能被创建它的 session 访问,所以在这个 session 结束的时候,会自动删除临时表。也正是由于这个特性,临时表就特别适合我们文章开头的 join 优化这种场景,原因:
HaC
2020/12/30
2K0
36 | 临时表和临时表
Django进阶-5-ORM连表查询
注意对象集合调用values(),正向查询是外键字段__XX,而反向是小写表名__YY看起来
小团子
2019/07/18
1.6K0
Django进阶-5-ORM连表查询
Django进阶-4-ORM单表操作
上一章提到,QuerySet与惰性机制: QuerySet特点: <1> 可迭代的 <2> 可切片 <3> 惰性计算和缓存机制 ① 增加操作 def orm(request): # o
小团子
2019/07/18
2840
Django进阶-4-ORM单表操作
MySQL中的两种临时表 外部临时表
通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭。这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)。
后端技术探索
2018/08/09
3.5K0
点击加载更多

相似问题

如何使用Django 1.8.5 ORM而不创建django项目?

54

如何使用Django orm创建临时布尔字段

10

计数(*),如Django Orm中的

21

从表中删除数据而不创建临时表

125

ORM Lite Android使用现有表创建临时表

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文