有時候會碰到這樣的場景,對於一些業務升級,我須要把數據庫數據作些處理,同時又想以 Django
項目的環境變量執行腳本,這個時候使用 python
腳本是再適合不過的手段了。python
python manage.py shell < script
或者shell
./manage.py shell < script
2.1 舉例數據庫
# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import unicode_literals from django.contrib.auth.models import User def show_user(): user = User.objects.get(username='admin') print 'I am {0}'.format(user.username) show_user()
python manage.py shell < script1.py
django
2.4.1 安裝了 ipython(這裏版本爲 4.2.0)segmentfault
2.4.2 沒有安裝 ipythonapp
手段1:在 app
下面創建一個 scripts
包,而後創建你的腳本spa
手段2:在項目目錄下面創建一個 scripts
包,而後創建你的腳本code
運行腳本命令以下:orm
python manage.py runscript script_name 或者 ./manage.py runscript script_name
# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import unicode_literals from django.contrib.auth.models import User def run(): user = User.objects.get(username='admin') print 'project_dir/cat/scripts/:I am {0}'.format(user.username)
python manage.py runscript showadmin
# -*- coding: utf-8 -*- from __future__ import absolute_import from __future__ import unicode_literals from django.contrib.auth.models import User def run(): user = User.objects.get(username='admin') print 'project_dir/scripts/:I am {0}'.format(user.username)
./manage.py runscript showadmin
runscript
命令會首先檢查每一個 app
下的 scripts
目錄,若是找到對應名字的腳本就會執行.而後檢查 project_dir/scripts
目錄下是否包含符合名字的腳本,若是找到也會執行.也就是說,咱們能夠在不一樣的 app
中建立相同名字的腳本,而且都會被執行.blog
此時有兩個 showadmin.py
文件
djtest/cat/scripts/showadmin.py
djtest/scripts/showadmin.py
運行結果以下:
這個自行參照文檔
示例以下:
from django.db import migrations from apps.xx.scripts.xx import run class Migration(migrations.Migration): initial = True dependencies = [ ('thirdservice', '0007_auto_20160909_1021'), ] operations = [ migrations.RunPython(run), ]
在 run
方法中封裝業務邏輯,這樣更爲方便一些