Skip to content

最小化Django ORM

Django ORM是我最喜欢用的ORM,也是我喜欢Django的重要原因。为了在各类项目中使用Django ORM,我将Django ORM功能抽离出来,可以对数据进行处理。

步骤如下:

  1. 创建一个Django项目和Django应用,本例中项目名称为orm,应用名称为app1
  2. 在models.py中定义数据模型,make migrations && migrate,生成数据库表
  3. 去掉orm文件夹下多余的文件,仅保留settings.py和__init__.py
  4. 在项目中创建调用ORM文件,如mini_orm.py

GitHub地址

moomboss-mini-orm

cmd
git clone git@github.com:silentQQQ/mini-orm.git

项目结构 django-mini-orm

orm\orm\settings.py说明

可以删除多余的配置项,保留必要项。

python
from pathlib import Path
import sys,os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
 
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '……'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
  
INSTALLED_APPS = [
    'apps.app1',
]
  
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
  
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_TZ = False 

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

apps\app1\models.py说明

python
from django.db import models

# Create your models here.
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50,null=True, blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    pub_date = models.DateField(null=True, blank=True)

    def __str__(self):
        return self.title

orm\main.py说明

python
import os
import sys
import django
from pathlib import Path
 

base_dir = str(Path(__file__).resolve().parent)
if base_dir.lower() not in sys.path:
    sys.path.append(base_dir)
 
# 注意! orm.settings应该修改project_name.settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm.settings")
django.setup()

from apps.app1.models import Book

if __name__ == '__main__':
    book = Book(title='moomboss blog', price=100, author='moomboss',pub_date='2021-11-01')
    book.save()
    print(book.pk)

完成了!可以尽情使用Django ORM了。

Released under the Apache 2.0 License.