网站基础风格创建,网络规划设计师视频徐朋百度网盘,上海 网站备案代理,永城市专业做网站在 Django 中#xff0c;models 提供了一种高层次的抽象来与数据库进行交互#xff0c;使得开发者可以使用 Python 代码而非直接编写 SQL 来执行增删改查#xff08;CRUD#xff09;操作。下面将详细介绍 Django 的 ORM#xff08;对象关系映射#xff09;操作如何对应到…在 Django 中models 提供了一种高层次的抽象来与数据库进行交互使得开发者可以使用 Python 代码而非直接编写 SQL 来执行增删改查CRUD操作。下面将详细介绍 Django 的 ORM对象关系映射操作如何对应到 MySQL 的 SQL 查询。
创建 (Create)
Django Models:
# 创建并保存一个新对象
new_entry MyModel(field1value1, field2value2)
new_entry.save()MySQL SQL:
INSERT INTO myapp_mymodel (field1, field2) VALUES (value1, value2);读取 (Read)
获取单个对象
Django Models:
# 根据主键获取一个对象
entry MyModel.objects.get(id1)MySQL SQL:
SELECT * FROM myapp_mymodel WHERE id 1;获取多个对象
Django Models:
# 获取所有对象
entries MyModel.objects.all()# 使用过滤条件获取对象
filtered_entries MyModel.objects.filter(field1value1)MySQL SQL:
-- 获取所有对象
SELECT * FROM myapp_mymodel;-- 使用 WHERE 子句过滤
SELECT * FROM myapp_mymodel WHERE field1 value1;聚合查询
Django Models:
from django.db.models import Count# 统计总数
count MyModel.objects.count()# 分组统计
grouped MyModel.objects.values(field1).annotate(countCount(id))MySQL SQL:
-- 统计总数
SELECT COUNT(*) FROM myapp_mymodel;-- 分组统计
SELECT field1, COUNT(id) AS count FROM myapp_mymodel GROUP BY field1;更新 (Update)
Django Models:
# 更新单个对象
entry MyModel.objects.get(id1)
entry.field1 new_value
entry.save()# 批量更新
MyModel.objects.filter(field1old_value).update(field1new_value)MySQL SQL:
-- 更新单个对象
UPDATE myapp_mymodel SET field1 new_value WHERE id 1;-- 批量更新
UPDATE myapp_mymodel SET field1 new_value WHERE field1 old_value;删除 (Delete)
Django Models:
# 删除单个对象
entry MyModel.objects.get(id1)
entry.delete()# 批量删除
MyModel.objects.filter(field1value1).delete()MySQL SQL:
-- 删除单个对象
DELETE FROM myapp_mymodel WHERE id 1;-- 批量删除
DELETE FROM myapp_mymodel WHERE field1 value1;高级查询
Django 的 ORM 还支持更复杂的查询例如联合查询、子查询等这些都可以通过 Django 的 Q 对象和 F 表达式来实现。对于非常复杂的查询如果 ORM 不足以满足需求Django 还允许直接执行原始 SQL 查询
from django.db import connectiondef custom_sql(query, paramsNone):with connection.cursor() as cursor:cursor.execute(query, params)return cursor.fetchall()这使得您可以根据需要灵活地选择是使用 ORM 抽象还是直接编写 SQL 查询。
总之Django 的 ORM 提供了一个强大而灵活的方式来与数据库交互简化了数据访问层的开发工作并且自动处理了许多底层细节如事务管理、连接池等。同时它也保持了足够的灵活性以应对复杂的查询需求。