Django学习笔记二:数据库操纵详解

打印 上一主题 下一主题

主题 1669|帖子 1669|积分 5007

Django框架提供了一个功能强盛的ORM(对象关系映射)系统,使得开发者可以使用Python代码来操纵数据库,而无需编写复杂的SQL语句。以下是Django数据库操纵的一些基本概念和方法:

模子定义

在Django中,模子是对数据库表的抽象。每个模子都是一个Python类,继续自django.db.models.Model。模子中的每个属性都对应数据库表中的一个字段。
  1. from django.db import models
  2. class Blog(models.Model):
  3.     title = models.CharField(max_length=200)
  4.     content = models.TextField()
  5.     pub_date = models.DateTimeField(auto_now_add=True)
复制代码
数据库迁移

当你定义或修改了模子后,需要创建迁移文件,并将这些变动应用到数据库中。


  • 创建迁移文件:
    1. python manage.py makemigrations
    复制代码
  • 应用迁移到数据库:
    1. python manage.py migrate
    复制代码
CRUD操纵



  • 创建:创建一个新的记载。
    1. blog = Blog(title='My first blog', content='This is my first blog post.')
    2. blog.save()
    复制代码
  • 读取:查询数据库中的记载。
    1. blogs = Blog.objects.all()  # 获取所有记录
    2. blog = Blog.objects.get(id=1)  # 获取特定记录
    复制代码
  • 更新:修改已存在的记载。
    1. blog = Blog.objects.get(id=1)
    2. blog.title = 'My updated blog'
    3. blog.save()
    复制代码
  • 删除:删除记载。
    1. blog = Blog.objects.get(id=1)
    2. blog.delete()
    复制代码
查询集(QuerySet)

QuerySet是Django ORM返回的一种数据结构,用于体现数据库查询的结果集。它支持链式调用,可以举行过滤、排序、限定等操纵。


  • 过滤:
    1. blogs = Blog.objects.filter(title__contains='Django')
    复制代码
  • 排除:
    1. blogs = Blog.objects.exclude(is_published=False)
    复制代码
  • 排序:
    1. blogs = Blog.objects.order_by('pub_date')
    复制代码
  • 限定:
    1. blogs = Blog.objects.all()[:10]  # 获取前10条记录
    复制代码
复杂查询

Django ORM支持更复杂的查询操纵,如关联查询、聚合查询等。


  • 关联查询:
    1. from django.db.models import Count
    2. author_count = Author.objects.annotate(book_count=Count('book')).filter(book_count__gt=1)
    复制代码
  • 聚合查询:
    1. from django.db.models import Avg
    2. average_book_count = Author.objects.aggregate(avg_books=Avg('book__count'))
    复制代码
使用原生SQL

固然Django ORM非常强盛,但在某些环境下,你大概需要执行原生SQL语句。


  • 使用raw()方法:
    1. blogs = Blog.objects.raw('SELECT * FROM myapp_blog WHERE title LIKE "%Django%"')
    复制代码
  • 使用cursor()方法:
    1. from django.db import connection
    2. with connection.cursor() as cursor:
    3.     cursor.execute('SELECT * FROM myapp_blog WHERE title LIKE %s', ['%Django%'])
    4.     blogs = cursor.fetchall()
    复制代码
留意事项



  • 只管使用Django ORM提供的抽象方法来操纵数据库,这样可以保证代码的可读性和数据库的兼容性。
  • 当使用原生SQL时,需要特别留意SQL注入的风险。
  • 在举行数据库操纵时,应该留意非常处理,避免由于数据库操纵导致步伐崩溃。
以上是Django数据库操纵的一些基本概念和方法,更多详细信息可以参考Django的官方文档。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表