Django ORM独立使用探索
感觉Django ORM不错,如果能独立出来,方便使用于其它的应用(甚至非Web应用),无疑对开发带来很大的便宜。
分析Django项目的结构
DjangoProjectName(Folder)
manage.py
DjangoProjectName(Folder)
__init__.py
settings.py
AppName(Folder)
models.py
migrations(Folder)
__init__.py
在DjangoProjectName.settings.py中保留以下设置:
SECRET_KEY
INSTALLED_APPS(只留下AppName,其它的删除)
DATABASES
EFAULT_AUTO_FIELD
在models中添加类
运行python manage.py makemigrations
python manage.py migrate
能够成功在数据库中建立表
在数据库中建立数据表,然后运行python manage.py inspectdb>models.py
也能成功从数据库中的表生成models类
新建一个python文件,来测试使用ORM类,结果出现错误,程序会models的base类中检测app是否装载(python manage.py runserver),注释掉后直接赋值app_label变量,仍有其它错误,什么基它的设置,比如database,template相关的,难道要使用models类真难吗?
后发现运行python manage.py shell
在这样的交互环境里,可以正常使用ORM类!!!
shell继承于basecommand,在shell中有一句:
requires_system_checks = False
在从此出发.....
settings 中的
BASE_DIR项要保留
在运行的py文件中引入:
import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoORM.settings")
django.setup()
import orm_app.models
OK,搞定!
对于项目下的manage.py文件,可以用下面的方式替代
from django.apps import apps
from django.conf import settings
from django.core.management import call_command
apps.populate(settings.INSTALLED_APPS)
print("----------apps.populate----------")
def migrate(app_name: str):
call_command("migrate", app_name)
def make_migrations(app_name: str):
call_command("makemigrations", app_name)