10.24

ORM:

Python语法     sql
    
    类         表
    属性       字段
    对象       表记录

    
一 如何创建表

在models.py:
    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="人民出版社")
    print(book.title)
    
    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=edit_book_id).update(price=111)
      Book.objects.filter(price=111).update(publish="南京出版社")
    
三 图书管理系统的请求流程给1汽车、kj
   (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 返回给浏览器
          
       用户此时可以看到书籍的查看页面
          
       
单表查询:
    查询API: 
    queryset
    
    (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
    (7) count :数数  :由queryset对象调用 返回int
    (8) reverse():由queryset对象调用,返回值是queryset
    (9) exists(): 由queryset对象调用 返回值布尔值
    (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)
        Book.objects.filter(price__lt=100)
        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")
        Book.objects.filter(pub_date__year=2012)
    
    
https://www.cnblogs.com/yuanchenqi/articles/8963244.html    
https://www.cnblogs.com/sss4/p/7070942.html orm一片不错的博客 链接

 

posted @ 2018-10-24 18:48  玩蛇少年7372  阅读(124)  评论(0编辑  收藏  举报