一:如何创建表
class Food(models.Model):
title = models.CharField(max_length=32)
执行数据库迁移命令
1.python manage.py makemigrations
2.python manage.py migrate
注意:必须在settings中的INSTALLED_APPS 注册models所在的app
二:对于表记录的增删改查
class Book(models.Model): nid=models.AutoField(primary_key=True) title=models.CharField(max_length=32) price=models.DecimalField(max_digits=8,decimal_places=2) # 999999.99 pub_date=models.DateTimeField() # "2012-12-12" publish=models.CharField(max_length=32)
1.添加记录:
方式1:
book=Book(title="python",price=123,pub_date="2012-12-12",publish="人民出版社") book.save()
方式2:
book = Book.objects.create(title="python",price=123,pub_date="2012-12-12",publish="人民出版社")
2.查询记录
book_list=Book.objects.all() # [book1,book2,book3] book_list=Book.objects.filter(price=100) # [book1,book2,book3]
3.删除记录
Book.objects.filter(price=100).delete()
4.修改记录
Book.objects.filter(nid=5).update(price=100) Book.objects.filter(price=111).update(publish="南京出版社")
图书管理系统的请求流程
(1)查看书籍: 请求url :http://127.0.0.1:8000/books/ 请求方式:GET django的urls.py: path('books/', views.books,name="books"), 执行books(request): 1 查询所有书籍 2 将查询的queryset数据传入模板,render渲染出一个books页面 3 返回给浏览器 用户此时可以看到书籍的查看页面 (2) 添加书籍 请求url :http://127.0.0.1:8000/books/add/ 请求方式:GET django的urls.py: path('books/add/', views.addbook), 执行addbook(request): if GET请求: 返回给浏览器一个提交书籍的表单页面 用户此时可以看到书籍的添加页面 ################ 用户输入数据,点击提交 请求url :http://127.0.0.1:8000/books/add/ 请求方式:POST django的urls.py: path('books/add/', views.addbook), 执行addbook(request): if GET请求: 返回给浏览器一个提交书籍的表单页面 用户此时可以看到书籍的添加页面 else: 获取用户提交的数据,向数据库中添加一本书籍 返回一个重定向:/books/ ################ 浏览器接收到重定向的响应:再发请求 请求url :http://127.0.0.1:8000/books/ 请求方式:GET django的urls.py: path('books/', views.books,name="books"), 执行books(request): 1 查询所有书籍 (此时查询的书籍包含刚刚添加的书籍) 2 将查询的queryset数据传入模板,render渲染出一个books页面 3 返回给浏览器 用户此时可以看到书籍的查看页面 (3) 删除请求 请求url :http://127.0.0.1:8000/books/delete/5 请求方式:GET django的urls.py: re_path('books/delete/(d+)', views.delbook,name="books"), 执行delbook(request,5): 1 查询主键为5的书籍删除 2 返回一个重定向:/books/ ################ 浏览器接收到重定向的响应:再发请求 请求url :http://127.0.0.1:8000/books/ 请求方式:GET django的urls.py: path('books/', views.books,name="books"), 执行books(request): 1 查询所有书籍 (此时查询的书籍没有刚刚删除的书籍) 2 将查询的queryset数据传入模板,render渲染出一个books页面 3 返回给浏览器 用户此时可以看到书籍的查看页面
三:单表查询
(1) all() : 调用者:objects管理器 返回queryset (2) filter() :调用者:objects管理器 返回queryset (3) get方法():调用者:objects管理器 返回查询到model对象 (注意:查询结果有且只有一个才执行) (4) first(),last()方法:调用者:queryset 返回model对象 (5) exclude():调用者:objects管理器 返回queryset 不符合你输入条件的 (6) order_by():由queryset对象调用,返回值是queryset 默认升序,降序加一个-"-price", order_by("price","nid")以price升序排序,要是price相同就一nid的升序排序 (7) count :数数 :由queryset对象调用 返回int (8) reverse():由queryset对象调用,返回值是queryset 翻转 (9) exists(): 由queryset对象调用 返回值布尔值 检查表中是否有数据,不在乎多少,有数据就true,没有就false (10)values()方法: 由queryset对象调用,返回值是queryset [{}] (11)values_list():由queryset对象调用,返回值是queryset [(,)] (12)distinct(): 由queryset对象调用,返回值是queryset 去重
模糊查询(双下划线)
Book.objects.filter(price__in=[100,200,300]) Book.objects.filter(price__gt=100) 大于 gte >= Book.objects.filter(price__lt=100) 小于 lte <= Book.objects.filter(price__range=[100,200]) Book.objects.filter(title__contains="python") 包含 Book.objects.filter(title__icontains="python") 不区分大小写 Book.objects.filter(title__startswith="py") 以xx开头 Book.objects.filter(pub_date__year=2012)