django-orm框架表單的增刪改查

08.14自我總結

django-orm框架

一.orm基本配置

1.建立django項目

  • 命令行:cmd先去到django建立目錄,而後輸入django-admin startproject django項目名稱
  • pycharm就直接建立新project選擇django

2.settings.py文件配置

1.須要在install_app中配置須要鏈接的app

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app_mysql.apps.AppMysqlConfig', #這個是咱們pycharm建立時候自動幫咱們註冊的就是app配置
    'app_mysql', #若是有新的或者命令行建立的app咱們只要這這裏面把app名稱寫上去便可
]

2. 須要在database中進行配置鏈接mysql的用戶名和密碼以及數據庫

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.sqlite3',  #sqlite3數據庫是個小型的數據庫
        'NAME':os.path.join(BASE_DIR,'sqlite3') #NAME填寫路徑便可
    }
    # 'default': {
    #     'ENGINE': 'django.db.backends.mysql',
    #     'NAME':'庫名',
    #     'USER':'mysql帳號名稱',
    #     'PASSWORD':'mysql密碼',
    #     'HOST':'127.0.0.1',
    # }
}

3.__init__的配置

import pymysql
pymysql.install_as_MySQLdb()

4.modelse文件配置

配置表單信息python

from django.db import models

# Create your models here.
class sb(models.Model):
    ### 主鍵自增id不用寫, 默認會加上
    name = models.CharField(max_length=30,null=True)

class big_sb(models.Model):
    name = models.CharField(max_length=30, null=True)
    bigsb = models.ForeignKey('sb',id) 


class sb2(models.Model):
    name = models.CharField(max_length=30,null=True)

5.生成表單語句

在命令行進行操做mysql

  • python manage.py makemigrations
  • python manmge.py migrate

二.orm框架的表單的增刪改查

必須先在邏輯業務層中載入sql

from 表單所在的app名稱 import models數據庫

其中表名均爲再modelse中配置的表的名稱django

1.增

  • 單條數據:session

    • 方法一 : models.表名.objects.create(字段1=值1,字段2=值2........)
    • 方法二:dict = {'字段1':值,'字段2':值.........};models.表名.objects.create(**dict)
  • 多條數據:app

    info = [
         models.UserInfo(name='root1', age=34, ut_id=1),
         models.UserInfo(name='root2', age=35, ut_id=2),
         models.UserInfo(name='root3', age=36, ut_id=1),
         models.UserInfo(name='root4', age=37, ut_id=3),
         models.UserInfo(name='root5', age=32, ut_id=1),
    ]
    models.UserInfo.objects.bulk_create(info)

2.刪

models.表名.objects.filter(知足的條件).delete()

3.改

models.表名.objects.filter(知足的條件).update(name='lll', age=23)

4.查

models.UserType.objects.all().values()

表A的ud關聯表b框架

有子健關係的查詢正向查詢經過A表中的ud查到表b的id

  • 方法一:models.A.objects.all().values('ud__id')fetch

  • 方法二spa

    res = models.A.objects.all()
    for a in res:
        print(a.ud.id)

有子健關係的查詢返向查詢經過b表中的查到a表ID

  • 方法一:models.B.objects.all().values('A__id')

  • 方法二:

    res = models.B.objects.all()
    for b in res:
        print(b.a_set.id) #### 表名小寫_set

三.orm進階查詢

1.字段名過濾

filter知足條件的

exclude不知足條件

用法:

#id等於3的
models.表名.objects.filter(id=3).values()

#id不等於3的
models.表名.objects.exclude(id=3).values()

關於filter與exclude裏面填寫的參數

  • 等於:字段名=值

  • 大於:字段名__gt=值

  • 大於等於:字段名__gte=值

  • 小於:字段名__lt=值

  • 小於等於:字段名__lte=值

2.成員in not in

res = models.表名.objects.filter(字段名__in=[2,4,5]) # where id in (2,4,5)
res = models.表名.objects.exclude(字段名__in=[1,2]) # where id not in (1,2)

3.區間between...and

# where id between 4 and 8   [4,8]
res = models.表名.objects.filter(字段名__range=[4,8])

4.模糊查詢like

# where name like 'a%'
res = models.表名.objects.filter(字段名__startswith="a")
res = models.表名.objects.filter(字段名__istartswith="a") #忽略大小寫

# where name like '%a'
res = models.表名.objects.filter(字段名__endswith="a")
res = models.表名.objects.filter(字段名__iendswith="a") #忽略大小寫

# where name like '%a%'
res = models.表名.objects.filter(字段名__contains="a")
res = models.表名.objects.filter(字段名__icontains="a") #忽略大小寫

只要是i開頭的基本上都是忽略大小寫

5.數據條數count

# select count(*) from userinfo where id>3;
# select count(id) from userinfo where id>3;
#用sql語句查詢數據條數儘可能不要查count(*)查主鍵會快不少
res = models.UserInfo.objects.filter(id__gt=3).count()

6.排序order by

#升序
res = models.表名.objects.order_by('字段名稱')

#降序
res = models.表名.objects.order_by('-字段名稱')

#多個條件進行排序
res = models.表名.objects.order_by('字段1','字段2') #當字段1相同是會更具字段2進行排序

7.分組group by已經having

# select id, sum(age) as s, username from userinfo group by username
from django.db.models import Count, Min, Max, Sum
res = models.UserInfo.objects.values("name").annotate(s=Sum('age'))

# select id, sum(age) as s, username from userinfo group by username having s > 50;
res = models.UserInfo.objects.values("name").annotate(s=Sum('age')).filter(s__gt=50)

8.分頁limit

# limit 1, 3 分頁
res = models.UserInfo.objects.all()[1:4]
#由於獲取對象是列表全部切片便可

9.last/first

第一條:res = models.表名.objects.first()

最後一條:res = models.表名.objects.last()

10.only|defer

只查某個字段:only('字段名稱')

除某個字段之外的全部字段:defer('字段名')

注意:主鍵id無論怎麼樣都會查

12.and|or

只有and

#id等於3and名字等於a
models.表名.objects.filter(id=3,and name='a').values()

只有or

# Q
from django.db.models import Q
res = models.UserInfo.objects.filter(Q(id__gt=3) | Q(name='zekai')) #or用|連接

有and和or

# Q
from django.db.models import Q
res = models.UserInfo.objects.filter( Q(Q(id__gt=3) | Q(name='zekai')) & Q(age=23) ) and用&連接

13.F

from django.db.models import F
models.UserInfo.objects.update(name=F('name')+1) #字段名稱都加1

14.原生sql 相似pymysql

from django.db import connection, connections
cursor = connection.cursor()  # cursor = connections['default'].cursor()
cursor.execute("""SELECT * from auth_user where id = %s""", [1])
row = cursor.fetchone()
print(row)

15.去重distinct

models.UserInfo.objects.values("name", 'age').distinct() #前面values有多少個就對多少個值進行去除

四.補充一個小點

print(res.query) 查看上述代碼生成的sql語句

相關文章
相關標籤/搜索