Django 07. django框架模型之增刪改查基本操做

簡介python

        django框架模型之數據庫表增刪改查基本操做

1. 生成數據庫表結構
        models.py
                  #!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
 
class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()
    
    def __unicode__(self):
        return self.name
 

3. 增mysql

      1) 使用建立對象並save()的方法插入一條數據。
                 F:\workSpace\Python\django\Test\modles_test>python manage.py shell
Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from web.models import *
>>> b = Blog(name='Beates Blog', tagline='All the latest Beatles news.')
>>> b.save()
>>>
>>> b.id
1L
>>> b.name
'Beates Blog'
>>> b.tagline
'All the latest Beatles news.'  
 
      2) 直接調用create方法插入一條數據不用save。
>>> Blog.objects.create(name='wangZhen Blog', tagline='All the django blog.')
<Blog: wangZhen Blog>

4. 查
web

        1)  查出庫中全部條數的數據  
                 >>> Blog.objects.all()
               <QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
 
        2)  查詢帶字段名的全部條數數據
                 >>> Blog.objects.all().values()
                    <QuerySet [{'tagline': u'All the latest Beatles news.', u'id': 1L, 'name': u'Beates Blog'}, {'tagline': u'All the django blog.', u'id': 2L, 'name': u'wangZhen Blog'}]>
 
        3) 查詢單條數據
      >>> Blog.objects.get(name = 'Beates Blog')
      <Blog: Beates Blog>
 
            注意:若是查詢的不存在時會報「DoesNotExist」的錯
                 >>> Blog.objects.get(name = 'Beates Blogs')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Python27\lib\site-packages\django\db\models\query.py", line 380, in get
    self.model._meta.object_name
DoesNotExist: Blog matching query does not exist.
 
        4)  查詢匹配條件的多條數據  
                 filter(name='xxx');
                    filter(name__contains='');
                    (id__in = [1,2,3]) ;

              icontains(大小寫無關的LIKE);sql

              startswith和endswith, 
              range(SQLBETWEEN查詢)
              'gt', 'in', 'isnull', 'endswith', 'contains', 'lt', 'startswith', 'iendswith', 'icontains','range', 'istartswith'
          eg.      
                 >>> Blog.objects.filter(id__in = [1,2])
               <QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
                >>> Blog.objects.filter(id__in = [1,2])[0]
                <Blog: Beates Blog>
                >>> Blog.objects.filter(id__in = [1,2])[0].name
               u'Beates Blog'
                >>> Blog.objects.filter(name__startswith = 'w')
<QuerySet [<Blog: wangZhen Blog>]>
>>> Blog.objects.filter(tagline__contains = 'latest')
<QuerySet [<Blog: Beates Blog>]>
>>> Blog.objects.filter(name__icontains = 'blog')
<QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
                >>> Blog.objects.filter(name__contains = 'blog')
               <QuerySet []>
                >>> Blog.objects.filter(id__range=(1,3))
               <QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
                >>> Blog.objects.filter(id__lt = 3, name__icontains = 'wangzhen')
               <QuerySet [<Blog: wangZhen Blog>]>
 
        5)  根據字段內容排序後展現數據  
            根據name字段的內容進行數據排序,會根據字母和數字排序 
            >>> Blog.objects.order_by('name')
           <QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
 
        6)  根據字段內容逆向排序後展現數據,加一個負號  
            >>> Blog.objects.order_by('-name')
           <QuerySet [<Blog: wangZhen Blog>, <Blog: Beates Blog>]>
 
        7)  連鎖查詢,先過濾,過濾後進行逆向排序  
            >>> Blog.objects.filter(id__lt = 2).order_by('-name')
           <QuerySet [<Blog: Beates Blog>]>        
 
        8)  限制數據條數,至關於mysql limit  
             切片不支持負數,這樣就數據序列倒過來的第一條,也就是最後一條數據
            >>> Blog.objects.all()
   <QuerySet [<Blog: Beates Blog>, <Blog: wangZhen Blog>]>
   >>> Blog.objects.all()[1]
   <Blog: wangZhen Blog>

5. 刪
        1)  刪除表中所有數據
            Blog.objects.all().delete() 
 
        2)  刪除一條數據
            Blog.objects.get(id = "1").delete()
 
        3) 刪除多條數據
            Blog.objects.filter(id__gt = 3).delete()

6. 改
        1) 修改對象屬性並save進行修改
           正確:
                         >>> a = Blog.objects.get(id=1)
>>> a.name = 'test0'
>>> a.save()
>>> Blog.objects.get(id = 1).name
u'test0‘
  錯誤:
                         >>> Blog.objects.get(id = 1).name = 'test00'
>>> Blog.objects.get(id = 1).save()
>>> Blog.objects.get(id = 1).name
u'test0'
 
2)  更新多條數據的多個字段或一個字段
>>> Blog.objects.filter(id__in=[1,2]).update(name = 'test')
1L
 
       3) 更新全部數據的多個或一個字段(慎用)(L是line的)

                            >>> Blog.objects.all().update(name = 'test')shell

                             2L

7.  其餘
        數量:
                 Blog.objects.all().count()
 
       聚合:
                 from django.db.models import Min,Max,Sum 
                  Blog. objects.all().aggregate(Max('guest_id'))
 
       原始SQL:
                  cursor = connection.cursor()
cursor.execute('''SELECT DISTINCT first_name ROM people_person WHERE last_name = %s""", ['Lennon'])
row = cursor.fetchone() 
相關文章
相關標籤/搜索