Django框架提供了一个功能强盛的ORM(对象关系映射)系统,使得开发者可以使用Python代码来操纵数据库,而无需编写复杂的SQL语句。以下是Django数据库操纵的一些基本概念和方法:
模子定义
在Django中,模子是对数据库表的抽象。每个模子都是一个Python类,继续自django.db.models.Model。模子中的每个属性都对应数据库表中的一个字段。
- from django.db import models
- class Blog(models.Model):
- title = models.CharField(max_length=200)
- content = models.TextField()
- pub_date = models.DateTimeField(auto_now_add=True)
复制代码 数据库迁移
当你定义或修改了模子后,需要创建迁移文件,并将这些变动应用到数据库中。
- 创建迁移文件:
- python manage.py makemigrations
复制代码 - 应用迁移到数据库:
CRUD操纵
- 创建:创建一个新的记载。
- blog = Blog(title='My first blog', content='This is my first blog post.')
- blog.save()
复制代码 - 读取:查询数据库中的记载。
- blogs = Blog.objects.all() # 获取所有记录
- blog = Blog.objects.get(id=1) # 获取特定记录
复制代码 - 更新:修改已存在的记载。
- blog = Blog.objects.get(id=1)
- blog.title = 'My updated blog'
- blog.save()
复制代码 - 删除:删除记载。
- blog = Blog.objects.get(id=1)
- blog.delete()
复制代码 查询集(QuerySet)
QuerySet是Django ORM返回的一种数据结构,用于体现数据库查询的结果集。它支持链式调用,可以举行过滤、排序、限定等操纵。
- 过滤:
- blogs = Blog.objects.filter(title__contains='Django')
复制代码 - 排除:
- blogs = Blog.objects.exclude(is_published=False)
复制代码 - 排序:
- blogs = Blog.objects.order_by('pub_date')
复制代码 - 限定:
- blogs = Blog.objects.all()[:10] # 获取前10条记录
复制代码 复杂查询
Django ORM支持更复杂的查询操纵,如关联查询、聚合查询等。
- 关联查询:
- from django.db.models import Count
- author_count = Author.objects.annotate(book_count=Count('book')).filter(book_count__gt=1)
复制代码 - 聚合查询:
- from django.db.models import Avg
- average_book_count = Author.objects.aggregate(avg_books=Avg('book__count'))
复制代码 使用原生SQL
固然Django ORM非常强盛,但在某些环境下,你大概需要执行原生SQL语句。
- 使用raw()方法:
- blogs = Blog.objects.raw('SELECT * FROM myapp_blog WHERE title LIKE "%Django%"')
复制代码 - 使用cursor()方法:
- from django.db import connection
- with connection.cursor() as cursor:
- cursor.execute('SELECT * FROM myapp_blog WHERE title LIKE %s', ['%Django%'])
- blogs = cursor.fetchall()
复制代码 留意事项
- 只管使用Django ORM提供的抽象方法来操纵数据库,这样可以保证代码的可读性和数据库的兼容性。
- 当使用原生SQL时,需要特别留意SQL注入的风险。
- 在举行数据库操纵时,应该留意非常处理,避免由于数据库操纵导致步伐崩溃。
以上是Django数据库操纵的一些基本概念和方法,更多详细信息可以参考Django的官方文档。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |