当前位置: 首页 > 编程笔记 >

在脚本中单独使用django的ORM模型详解

吕英才
2023-03-14
本文向大家介绍在脚本中单独使用django的ORM模型详解,包括了在脚本中单独使用django的ORM模型详解的使用技巧和注意事项,需要的朋友参考一下

有时候在测试django中一些模块时,不想重新跑一整个django项目,只想跑单个文件,正好写在if __name__ == '__main__': 这样也不会打扰到正常的代码逻辑

方法

正常方法

大家都知道的方法就是'python manage.py shell',当然我知道这可能不是你需要的;

更好用的方法

在脚本中import模型前调用下面几行即可:

import os, sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 定位到你的django根目录
sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir)))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dj_tasks.settings") # 你的django的settings文件

接下来再调用'from XXXX.models import XXX'就不会报错了

补充知识:Django使用外部文件对models操作容易产生的问题

看代码吧!

from pv_server.models import IVCurvesInfo, FaultType
import os
import django
 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PV_Moniter.settings')
django.setup()
 
def add_fault_type(fault_list, true_data_list, fault_decription_list=None):
  for item in fault_list:
    idx = fault_list.index(item)
    true_data = true_data_list[idx]
    fault_decription = fault_decription_list[idx] if (fault_decription_list and fault_decription_list[idx]) \
      else None
 
    FaultType.addFault.create_faultType(item, true_data,fault_decription)
 
if __name__ == '__main__':
  add_fault_type(['normal', 'partial shadow_1', 'partial shadow_2',
          'partial shadow_3', 'short circuit_1', 'short circuit_2',
          'degradation_1', 'degradation_2', 'open_circuit'],
          [0] * 9)
  print("Done!")

以上述代码为例

会产生

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

的问题,这里要注意 明明已经增加了

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PV_Moniter.settings')
django.setup()

但,还是报错的原因是因为!!!!在导入models的时候,还没有在django对应的环境下导入

这里导入的顺序很重要

import os
import django
 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'PV_Moniter.settings')
django.setup()
 
from pv_server.models import IVCurvesInfo, FaultType

这样更换导入顺序后,就顺利的解决啦!

以上这篇在脚本中单独使用django的ORM模型详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我想单独使用Django ORM。尽管搜索了一个小时的Google,但我仍然有几个问题: 是否需要我使用setting.py,/ myApp /目录和modules.py文件设置Python项目? 我可以创建一个新的并运行以使其自动设置表和关系,还是只能使用现有Django项目中的模型? 关于的问题似乎很多。如果你不调用现有模型,是否需要? 我想最简单的事情是让某人发布基本模板或流程的

  • 本文向大家介绍简单了解django orm中介模型,包括了简单了解django orm中介模型的使用技巧和注意事项,需要的朋友参考一下 什么是中介模型 中介模型针对的是ManyToMany(多对多)的时候第三张表的问题, 中介模型其实指的就是我们不通过Django创建第三张表,如果自己不创建第三张表,而是由django给我们创建,那就不存在中介模型 中介模型示例 普通的ManyToMany示例 这

  • 问题内容: 我试图从另一个python脚本访问我的Django(v1.10)应用程序数据库,但遇到了一些麻烦。 这是我的文件和文件夹结构: 根据Django的文档,我看起来像这样: 但它会生成运行时错误: 我应该注意,我的INSTALLED_APPS列表包含了它的最后一个元素。 相反,如果我尝试通过这样的配置: 我得到: 如果我进行编辑和添加,LOGGING_CONFIG=None则会遇到另一个有

  • 本小节将详细为大家介绍 Django 中内嵌的 ORM 模型及其使用,这里我会结合源码的方式为大家展示 Django 内部 ORM 模型的实现原理。 1. ORM 介绍 ORM 的概念如下: 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM 是通过使用描述对象和数据库之间映射的元数据,

  • 本文向大家介绍django中ORM模型常用的字段的使用方法,包括了django中ORM模型常用的字段的使用方法的使用技巧和注意事项,需要的朋友参考一下 与数据类型相关的字段 CharField         作用:字符串字段, 用于较短的字符串.         参数:CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数.

  • 本文向大家介绍Django ORM filter() 的运用详解,包括了Django ORM filter() 的运用详解的使用技巧和注意事项,需要的朋友参考一下 最近发布代码的时候,遇到一个问题,发现Python中eval()函数的危险性.然而我还是个菜鸟,其中有一段代码是这样的。 queryset = eval("models.TUserInfo.objects.filter({0})[{1}