脚本错误总结
通过QuerySet API添加字段
错误1:引用自有app顺序错误,先要导入环境变量,再引用模块
import os, django, time, sys
#from users.models import User 错误:提前引入
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
sys.path.append(root_dir)
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
django.setup()
from users.models import User ##此处引入
错误 2:models导入不用具体到models目录下的文件 此时models目录下还有具体的user、group文件
from users.models.user import User #错误写法
错误 3:设置脚本运行路径 ,脚本运行路径应为脚本的上层目录
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
基本使用含义:
(py3) [root@VM_0_4_centos tools]# cat test.py
import os
print(os.path.abspath(__file__)) #绝对路径
print(os.path.dirname(os.path.abspath(__file__))) #文件上层目录,父级目录
print(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')) #拼接
(py3) [root@VM_0_4_centos tools]# python test.py
/opt/jumpserver/apps/tools/test.py
/opt/jumpserver/apps/tools
/opt/jumpserver/apps/tools/..
错误4: 不需要设置默认编码 ,python3 默认使用的是utf-8编码
sys.setdefaultencoding('utf8')
错误5:print基本用法
print("%s %s " % (node.name,comment_opsadmin) + 'already have opsadmin')
print("The length of %s is %d" % (s,x))
完整代码
"""
- Django QuerySet Api
Version: 0.1
Date: 2020-03-08
"""
import os, django
root_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..')
sys.path.append(root_dir)
os.environ['DJANGO_SETTINGS_MODULE'] = 'jumpserver.settings'
django.setup()
from users.models import User
def update_comment():
comment_opsadmin = 'opsadmin'
nodes = User.objects.all()
print("Total nodes count: %d ." % (nodes.count()))
if nodes:
for node in nodes:
if not node.comment:
node.comment = comment_opsadmin
node.save()
print("success")
else:
current_comment = node.comment
comment_list = current_comment.split(',')
if comment_opsadmin in comment_list:
print("%s %s " % (node.name,comment_opsadmin) + 'already have opsadmin')
continue
node.comment = current_comment + ',' + comment_opsadmin
node.save()
print("success")
if __name__ == "__main__":
"""
Usage: python update_comment.py
"""
update_comment()