Django ORM - 如何单独使用 Django 数据库

目录

  • 背景
    • [对象与关系映射 ORM](#对象与关系映射 ORM)
    • [为什么要单独使用 Django ORM](#为什么要单独使用 Django ORM)
  • 准备工作
  • 具体方法

背景

对象与关系映射 ORM

ORM(Object-Relational Mapping,对象关系映射)是一种技术,用于将对象模型与关系数据库之间的映射关系进行转换。它使得开发者可以使用面向对象的方式与数据库进行交互,而无需编写复杂的SQL语句。

ORM的主要目的是简化数据库操作,使开发者能够更高效地与数据库进行交互。通过ORM,开发者可以定义模型类来描述数据库表的结构和行为,然后通过操作这些模型类来执行数据库的增删改查等操作。

ORM的工作原理大致如下:

  • 模型定义:开发者使用编程语言(如Python、Java等)定义模型类,这些类描述了数据库表的结构和字段。
  • 映射关系:ORM将模型类与数据库表之间建立映射关系,这种映射关系告诉ORM如何将对象与数据库表进行转换。
  • 操作模型:开发者通过操作这些模型类(如创建、读取、更新和删除对象)来执行数据库操作。
  • 底层转换:ORM在底层将对象的操作转换为SQL语句,并与数据库进行交互。

ORM的优点包括:

  • 简化开发:无需编写复杂的SQL语句,通过面向对象的方式与数据库交互。
  • 提高效率:减少了手动编写SQL语句和数据库操作的工作量,提高了开发效率。
  • 数据安全性:ORM通常提供数据验证和访问控制功能,确保数据的准确性和安全性。
  • 跨平台性:不同的ORM框架支持不同的数据库,使得应用程序可以轻松地迁移到不同的数据库平台。
  • 社区支持和资源丰富:许多编程语言和框架都支持ORM,拥有庞大的社区和丰富的资源,可以获得来自社区的支持和帮助。

为什么要单独使用 Django ORM

Django ORM(Object-Relational Mapping,对象关系映射)是Django Web框架中用于数据库操作的重要组件。它允许开发者以面向对象的方式与数据库进行交互,而无需编写复杂的SQL语句。

当我们使用 Django 框架构建网络应用时,就必然会使用到 Django ORM。但我们也可以单独使用 Django ORM,可能的原因包括:

  • 已有一个 Django 项目,希望使用其中的数据进行额外的分析、处理
  • 希望通过 ORM,而不用通过复杂的 SQL 语句,完成数据库的创建,并完成数据的增删改查
  • 例如 Django 提供了一些便利性的工具,通过 admin 后台,实现快速的数据可视化管理

准备工作

  • 对如何创建 Django 项目有初步了解
  • 对 Django 的项目结构、配置文件有初步了解
  • 需要对 Django 的 Queryset 有基本的了解
  • 确保 Django 正常安装

具体方法

从现成 Django 项目中抽离 ORM 进行使用

基本有三个步骤:

  • 完成相关文件的拷贝和目录建设
  • 调用 Django 的配置,通过 django.setup() 完成数据库等初始化
  • 完成环境变量的设置,确保 Django 应用能被发现,包引入能被发现

第一步: 完成相关文件的拷贝和目录建设

文件目录大概如下

bash 复制代码
├─django_orm # 项目文件
│  │  __init__.py
│  │  setup.py # 后面会提到内容
│  ├─ app_name # 原 Django 项目中的某个应用
│  │  │  models.py # 模型定义文件
│  │  │  __init__.py

第二步:调用 Django 的配置,通过 django.setup() 完成数据库等初始化

为了方便在不同的脚本和程序中使用,编写了 setup.py 文件,完成 Django 项目或是 ORM 的初始化

python 复制代码
import django
from django.conf import settings

# 定义一个安装配置函数
def setup():
	# 数据库设置,我这里是 MySQL,根据项目情况,可能是 SQLite 或者其他,请根据 Django 数据库配置要求配置
	DATABASES = {
	    'default': {
	        'ENGINE': 'django.db.backends.mysql',
	        'NAME': '数据库名称',
	        'USER': '用户名',
	        'PASSWORD': '密码',
	        'HOST': '数据库地址',
	        'PORT': '3306',
	        'default-character-set': 'utf8',
	            'OPTIONS': {
	                'sql_mode': 'STRICT_TRANS_TABLES'
	            }
	    }
	}
	
	# 设置 INSTALLED_APPS 用来让 Django 发现相关应用中的数据模型
	INSTALLED_APPS = [
	    'django_orm.app_name' # 注意这里 django_orm 是项目文件夹的名称,app_name 是应用名称
	]

	# 调用 django 的配置函数
	settings.configure(
	    INSTALLED_APPS = INSTALLED_APPS,
	    DATABASES = DATABASES,
	)
	django.setup()

第三步:完成环境变量的设置,确保 Django 应用能被发现,包引入能被发现

在任何需要使用 Django 数据库的地方,需要设置相关项目文件的路径到环境变量中,确保正常使用。

python 复制代码
import sys

LIBRARYPATH = 'django_orm 项目的上级文件夹'
sys.path.insert(0, LIBRARYPATH)

import django_orm.setup
django_orm.setup.setup() # 调用刚刚的 setup 函数进行项目安装

from django_orm.app_name.models import model_name # 正常引用模型

数据库断开连接处理

长时间不操作(主要常见于 Juypter notebook),会导致的数据库连接失败。最简单的方法是重启解释器,但是可能有一些数据已经在脚本里,所以无法重启解释器,那么可以使用下边的语句,强制 Django ORM 在下次数据处理的时候,强制重新连接。

python 复制代码
from django import db
db.close_old_connections()
相关推荐
技术宝哥2 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸3 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1233 小时前
Redis解析
数据库·redis·缓存
数据库幼崽3 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd4 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
noravinsc4 小时前
redis是内存级缓存吗
后端·python·django
betazhou4 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
百锦再4 小时前
大数据技术的主要方向及其应用详解
大数据·linux·网络·python·django·pygame
lyrhhhhhhhh5 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
noravinsc5 小时前
django中用 InforSuite RDS 替代memcache
后端·python·django