Django 操做Mysql數據庫 對錶進行增刪改查

首先說明:如下方法都是根據表已有的字段添加數據,若想新增字段,則需在類裏面新建靜態字段,
可參考Django 操做數據庫建表  ,增刪改查在views.py 操做, 建表和字段在models.py 操做python

一、首先在 models.py 裏定義 任意 1個 模型類 本人定義 Asset,可自動生成對應的表android

from django.db import models                    
class Asset(models.Model):                      #新建1個Asset表,字段名稱爲 hostname
    hostname=models.CharField(max_length=50)

二、在 views.py 裏 定義 增刪改查的方法 ,下面案例爲表增長字段sql

方法1:表類名.objects.create( )   如.Asset.objects.create(hostname=name)數據庫

方法2: 生成一個實例化對象 ,而後保存
          如.obj=Asset(hostname=name)
           obj.save()
django

from django.http import HttpResponse   #經過url顯示執行效果,則須要導入此模塊
from android.models import Asset       # 由於要操做具體的表,因此要導入modle.py 中 定義的類
def Add(request,name):
    a = Asset.objects.create(hostname=name)  
    #給數據庫增長數據 ,hostname 爲數據庫表中的字段名稱 ,name 是你傳人的參數
    print(name)               #打印 參數具體樹枝                  
    return HttpResponse('增長第{}數據成功'.format(a.id))  #經過佔位符format,來顯示具體修改來哪行ID ,

三、由於經過瀏覽器測試,因此須要配置  app下 urls.py 映射方法,不在工程下的url配置,是由於通常都經過分發來設置每一個APP有不一樣的url 映射 ,詳細見 Django 配置 urls.py 分發映射瀏覽器

方法: url(r'^add/(?P<name>\d*)/',Add),  注意:P要大寫app

from django.conf.urls import url    #配置URLS.PY 默認須要導入的模塊
from android.views import Add       #配置URL 根據 views.py 中 Add 函數解析
urlpatterns = [            
     url(r'^index/',index),                       #之前測試,跟本例子無關
     url(r'^login/',login),                       #之前測試,跟本例子無關
     url(r'^list/(?P<name>\d*)/',list),           #之前測試,跟本例子無關
     url(r'^add/(?P<name>\d*)/',Add),             #配置瀏覽器路徑add 用Add函數解析  http:/xxx/add/2344
     url(r'^asd/(?P<id>\d*)/',Delete),            #配置瀏覽器路徑asd,用Delete解析 http:/xxx/asd/1
     url(r'^update/(?P<id>\d*)/(?P<hostname>\w*)/',Update),
]
#Django 1.10 url 映射規則 爲列表,1.80 爲元組,因此 逗號不要忘了加

刪除數據庫表的字段函數

方法:Asset.objects.get(id=id).delete()  類名.objects.get(對應id)  #單條數據測試

         Asset.objects.filter(id=xxx).delete();   多條數據url

         Asset.objects.all().delete()        所有刪除

注意:   一、獲取單條數據推薦使用 filter().first(),而不推薦用get()
            二、由於 get() 獲取數據不存在會直接報錯,filter ()數據不存在返回None
            三、並且 models.xxx.objects.get(xxx=xxx) 返回的是一個對象實例,filter返回1個對象列表

            get( id=1) -- > User object                                         返回對象實例      

            filter( id =1) -- ><QuerySet [<User: User object>]>  返回QuerySet 對象列表 

            filter( id= 1).first() --> User object                             返回對象實例

若是返回的內容 爲QuerySet對象,可經過 .query 方法來查看 真實的sql語句
             aaa = models.xxx.objects.all()              #  aaa.query ,查看真實sql語句

              type(aaa)         數據類型爲,QuerySet對象,內部爲,列表包含的對象

             <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>

             aaa = models.xxx.objects.all().values('id','name')   #返回指定的QuerySet 對象列表

              返回的數據類型依然是QuerySet對象 ,不過內部爲列表包含的字典

             <QuerySet [{'user': 'harmel', 'id': 4}, {'user': '騷豬', 'id': 5}]>

             aaa = models.xxx.objects.all().value_list('id','name')   #返回指定的對象列

             返回的數據類型依然是QuerySet對象列表 ,不過內部爲列表包含的元組

             <QuerySet [(4, 'harmel'), (5, '騷豬')]>

def Delete(request,id):
    Asset.objects.get(id=id).delete()    #刪除數據庫字段
    return HttpResponse('刪除 第{}行數據成功'.format(id))

更新(修改)數據庫表中的字段

方法:a.獲取實例get(id=xxx),再save;  不存在會報錯
           b.update(指定列)                       不存在,返回none

方法1:get 獲取單條數據 ,設置單條數據的值,而後save()

def Update(request,id,hostname):
    obj=Asset.objects.get(id=id)
    obj.hostname=hostname
    obj.save()
    return HttpResponse('更新修改第{}行數據成'.format(id))

方法2:經過filter(id=xxx).update(xxx=xxx)  獲取多條對象的集合

即批量修改數據庫 表中的字段

Asset.objects.filter(id__gt=id).update(hostname=hostname)  ID大於XXX

其餘批量過濾方法:

過濾:filter(name='xxx');filter(name__contains='xxx');filter(name__icontains='xxx')(大小寫無關的LIKE);(id__in = [1,2,3]) ;

注意上面都是兩個"_" 號  且條件 查詢提交爲 and

大於:filter( id__gt =1)  ,filter( id__gte=3)  大於等於

小於: __lt
是否包含:exists()

排序:order_by("name") =asc ;order_by("-name")=desc
返回第n-m條:第n條[0];前兩條[0:2]
指定映射:values
數量:count()
聚合:from django.db.models import Min,Max,Sum objects.all().aggregate(Max('guest_id'))

相關文章
相關標籤/搜索