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)

 

posted @ 2021-07-21 11:40  吾心依旧  阅读(294)  评论(0)    收藏  举报