基本的 Django DB 查询
Django ORM 是一个功能强大的抽象,它允许你从数据库中存储和检索数据,而无需自己编写 SQL 查询。
我们假设以下模型:
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.ForeignKey(Author)
假设你已将上述代码添加到 django 应用程序并运行 migrate
命令(以便创建数据库)。启动 Django shell
python manage.py shell
这启动了标准的 python shell,但导入了相关的 Django 库,因此你可以直接关注重要部分。
首先导入我们刚刚定义的模型(我假设这是在文件 models.py
中完成的)
from .models import Book, Author
运行你的第一个选择查询:
>>> Author.objects.all()
[]
>>> Book.objects.all()
[]
让我们创建一个作者和书籍对象:
>>> hawking = Author(name="Stephen hawking")
>>> hawking.save()
>>> history_of_time = Book(name="history of time", author=hawking)
>>> history_of_time.save()
或使用 create function 创建模型对象并保存在一行代码中
>>> wings_of_fire = Book.objects.create(name="Wings of Fire", author="APJ Abdul Kalam")
现在让我们运行查询
>>> Book.objects.all()
[<Book: Book object>]
>>> book = Book.objects.first() #getting the first book object
>>> book.name
u'history of time'
让我们在 select 查询中添加一个 where 子句
>>> Book.objects.filter(name='nothing')
[]
>>> Author.objects.filter(name__startswith='Ste')
[<Author: Author object>]
获取有关给定书籍作者的详细信息
>>> book = Book.objects.first() #getting the first book object
>>> book.author.name # lookup on related model
u'Stephen hawking'
获得 Stephen Hawking 出版的所有书籍(作者查阅书)
>>> hawking.book_set.all()
[<Book: Book object>]
_set
是用于反向查找的符号,即当查找字段在 Book 模型上时,我们可以在作者对象上使用 book_set
来获取他/她的所有书籍。