Django笔记四十之运行Django环境的python脚本
本文首发于公众号:Hunter后端
这一篇笔记介绍如何在 Django 中运行脚本。
假设说我们要实现一个功能,需要获取 blog.models.Blog 这张表里的总数且使用 print() 输出。
如果代码逻辑很短,且是一次性执行的操作,我们可以在系统的根目录下使用 python3 manage.py shell 在 shell 中操作实现。
from blog.models import Blog
print(Blog.objects.all().count())
但是如果这个需求是一个很长的逻辑,且需要可以重复执行,那么应该如何操作呢?
首先,我们需要可以用到 Django 里的 Blog model,然后使用 model 的方式来进行查询。
我们可以将其写入一个文件,每次都使用 shell 来调用。
写入文件,在 shell 调用
比如,我们可以在 blog 创建一个 scripts 文件夹,然后创建一个 blog_script.py 文件:
# blog/scripts/blog_script.py
from blog.models import Blog
def get_blog_count():
print(Blog.objects.all().count())
然后每次调用的时候就进入 python3 manage.py shell 操作:
from blog.scripts.blog_script import get_blog_count
get_blog_count()
直接运行脚本
如果我们想创建一个文件,然后直接运行该脚本,那么就需要在脚本中引入当前 Django 系统环境的一些参数和变量,可以直接在系统根目录下创建一个 blog_script.py 文件:
# blog_script.py
import django, os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hunter.settings")
django.setup()
from blog.models import Blog
if __name__ == "__main__":
print(Blog.objects.count())
然后我们在系统根目录下直接执行该脚本:
python3 blog_script.py
这个文件目前只有放在系统的根目录下才可以运行,但是如果太多的脚本都放到系统根目录下也不太好,所以我们如果有这种脚本一般都可以放到对应的 application 的 scripts 文件夹下。
如果我们想要直接在 blog/scripts/ 下直接运行该脚本的话,则需要在我们的脚本中添加 Django 系统的路径,假设我们的 Django 系统名为 hunter,在服务器的路径为:/Users/xxxx/hunter/,我们可以如下操作:
# blog/scripts/
import django, os, sys
django_path = "/Users/xxxx/hunter/"
sys.path.extend([django_path])
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hunter.settings")
django.setup()
from blog.models import Blog
if __name__ == "__main__":
print(Blog.objects.count())
如果想获取更多后端相关文章,可扫码关注阅读:

Django笔记四十之运行Django环境的python脚本的更多相关文章
- Django笔记二十四之数据库函数之比较和转换函数
本文首发于公众号:Hunter后端 原文链接:Django笔记二十四之数据库函数之比较和转换函数 这一篇笔记开始介绍几种数据库函数,以下是几种函数及其作用 Cast 转换类型 Coalesce 优先取 ...
- Django笔记二十八之数据库查询优化汇总
本文首发于公众号:Hunter后端 原文链接:Django笔记二十八之数据库查询优化汇总 这一篇笔记将从以下几个方面来介绍 Django 在查询过程中的一些优化操作,有一些是介绍如何获取 Django ...
- Django笔记三十之log日志记录详解
本文首发于公众号:Hunter后端 原文链接:Django笔记三十之log日志的记录详解 这一节介绍在 Django 系统里使用 logging 记录日志 以下是一个简单的 logging 模块示例, ...
- Django笔记四之字段属性
这篇笔记介绍的 field options,也就是 字段的选项属性. 首先,关于 model,是数据库与 python 代码里的一个映射关系,每一个 model 是django.db.models.M ...
- Django笔记二十之手动编写migration文件
本文首发于公众号:Hunter后端 原文链接:Django笔记二十之手动编写migration文件 前面介绍过,migration 文件主要记录的是 Django 系统 model 的变化,然后通过 ...
- Django笔记二十二之多数据库操作
本文首发于公众号:Hunter后端 原文链接:Django笔记二十二之多数据库操作 这一篇笔记介绍一下多数据库操作. 在第十篇笔记的时候,简单介绍过 using() 的使用方法,多个数据库就是通过 u ...
- Django笔记二十五之数据库函数之日期函数
本文首发于公众号:Hunter后端 原文链接:Django笔记二十五之数据库函数之日期函数 日期函数主要介绍两个大类,Extract() 和 Trunc() Extract() 函数作用是提取日期,比 ...
- Django笔记二十六之数据库函数之数学公式函数
本文首发于公众号:Hunter后端 原文链接:Django笔记二十六之数据库函数之数学公式函数 这一篇来介绍一下公式函数,主要是数学公式. 其中 sin,cos 这种大多数情况下用不上的就不介绍了,主 ...
- Django笔记二十九之中间件介绍
本文首发于公众号:Hunter后端 原文链接:Django笔记二十九之中间件介绍 这一节介绍一下 Django 的中间件. 关于中间件,官方文档的解释为:中间件是一个嵌入 Django 系统的 req ...
- Django笔记三十二之session登录验证操作
本文首发于公众号:Hunter后端 原文链接:Django笔记三十二之session登录验证操作 这一篇笔记将介绍 session 相关的内容,包括如何在系统中使用 session,以及利用 sess ...
随机推荐
- appium 怎么就一直连接不上设备呢
- python abseil库(app, flags, logging)总结
absl (Abseil PythonCommon Libraries)(https://abseil.io/docs/python/)是用于构建Python应用程序的Python库代码集合,它包括三 ...
- Spring--事务角色+事务属性
事务管理员 发起事务方,在Spring中通常指代业务层开启事务的方法 也就是相当于这个: 事务协调员 加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法 也就是相当于这个: 事务相关配 ...
- nginx+lua+openresty+kafka相关问题汇总
这里使用的是kafka插件是doujiang大佬的https://github.com/doujiang24/lua-resty-kafka,版本为v0.2.0. 应用场景 在nginx转发中,记录非 ...
- 从零开始学习 Java 系列之你为什么要学 Java?
全文大约[4000]字,不说废话,只讲可以让你学到技术.明白原理的纯干货! 在正式开始本系列教程之前,壹哥希望先用一篇文章,来扫清你学习前的认知障碍.请坚定自己的学习信念,不要半途而废浪费时间,壹哥希 ...
- java注解与反射--2
java注解与反射--2 反射:java.Reflection 因为反射,使java具有了一定的动态性. java反射机制概述 动态语言: 是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至 ...
- 非常强大实用的键盘改键工具 - MapKeyboard
MapKeyboard可以重新定义键盘上的键位,对于使用笔记本或非标准101键盘的用户来说,是一个很有用的键盘改键工具.当你重新定义完键位,改变将被明显的标注出来,即使重启也不会改变.它不需安装,也可 ...
- 巧用Nginx配置解决跨域问题
页面nginx配置 1,前端页面放在域名根目录,比如,http://www.xuecheng.com/ ,对应的nginx配置: #门户 location / { alias D:/Z_lhy/Spr ...
- Go语言入门实战: 猜谜游戏+在线词典
包含基础语法和入门Go语言的3个案例 速览基础语法 对于耳熟能详的顺序结构.分支结构(if else-if else.switch).循环结构(for)不作赘述. 数组: 长度固定的元素序列 pack ...
- 部署kubernetes-dashboard并配置ServiceAccount和登录鉴权
"种草" kubernetes-dashboard 安装部署dashboard 创建用于登录面板的ServiceAccount 权限控制 "种草" kubern ...