基本的Django DB查询
示例
DjangoORM是功能强大的抽象,可让您从数据库存储和检索数据,而无需自己编写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命令(以便创建数据库)。通过以下方式启动DjangoShell
pythonmanage.pyshell
这将启动标准pythonshell,但会导入相关的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函数创建模型对象并保存在一行代码中
>>> 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'
让我们在我们的选择查询中添加一个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'
获取斯蒂芬·霍金(StephenHawking)发行的所有书籍(作者的查阅书)
>>> hawking.book_set.all()[<Book: Book object>]
_set是用于“反向查找”的符号,即当查找字段在Book模型上时,我们可以book_set在author对象上使用它来获取他/她的所有书籍。