最小化Django ORM
Django ORM是我最喜欢用的ORM,也是我喜欢Django的重要原因。为了在各类项目中使用Django ORM,我将Django ORM功能抽离出来,可以对数据进行处理。
步骤如下:
- 创建一个Django项目和Django应用,本例中项目名称为orm,应用名称为app1
- 在models.py中定义数据模型,make migrations && migrate,生成数据库表
- 去掉orm文件夹下多余的文件,仅保留settings.py和__init__.py
- 在项目中创建调用ORM文件,如mini_orm.py
GitHub地址
cmd
git clone git@github.com:silentQQQ/mini-orm.git项目结构 
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.titleorm\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了。