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


Posted in Python onApril 01, 2020

有时候在测试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模型详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python修改操作系统时间的方法
May 18 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Python Socket使用实例
Dec 18 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
python保存网页图片到本地的方法
Jul 24 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
Django models.py应用实现过程详解
Jul 29 Python
Python3视频转字符动画的实例代码
Aug 29 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
python将unicode和str互相转化的实现
May 11 Python
Spy++的使用方法及下载教程
Jan 29 Python
Python视频编辑库MoviePy的使用
Apr 01 #Python
python json.dumps中文乱码问题解决
Apr 01 #Python
Django Admin后台添加数据库视图过程解析
Apr 01 #Python
pyqt5中动画的使用详解
Apr 01 #Python
django项目中新增app的2种实现方法
Apr 01 #Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 #Python
django API 中接口的互相调用实例
Apr 01 #Python
You might like
解析csv数据导入mysql的方法
2013/07/01 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
nginx 设置多个站跨域
2021/03/09 Servers
Aptana调试javascript图解教程
2009/11/30 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
python中实现字符串翻转的方法
2018/07/11 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python实现翻译word表格小程序
2020/02/27 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
详解rem 适配布局
2018/10/31 HTML / CSS
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
致800米运动员广播稿
2014/02/16 职场文书
幼儿教师国培感言
2014/02/19 职场文书
服装采购员岗位职责
2014/03/15 职场文书
软件项目实施计划书
2014/05/02 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
单方投资意向书
2015/05/11 职场文书
初中家长意见
2015/06/03 职场文书
企业培训简报范文
2015/07/20 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
vue router 动态路由清除方式
2022/05/25 Vue.js