多表操作
昨日回顧:
1 模板導入
-寫一個模板
-{%include '模板名字'%}
2 母版繼承
-寫一個母版(留幾個盒子),名字叫XX
-{% block 名字 %}
{%endblock%}
-使用:繼承母版
-{%extends 'XX'%}
-重寫盒子(多個盒子,位置無關)
-{% block 名字 %}
寫內容
{%endblock%}
3 靜態文件相關
方式一
-先創建一個static的文件夾
-settings配置靜態文件
-STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static')
]
- <link rel="stylesheet" href="/static/utils/bootstrap-3.3.7-dist/css/bootstrap.css">
-<script src="/static/utils/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
方式二(動態)
-使用:{%load static%}
-<script src="{% static 'utils/bootstrap-3.3.7-dist/js/bootstrap.js'%}"></script>
方式三:
-使用:{%load static%}
-<script src="{% get_static_prefix %}css/mycss.css"></script>
4 單表操作:
-mysql數據庫:settings里配置
'default': {
# key值必須都是大寫
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day76',
'HOST':'127.0.0.1',
'PORT':3306,
'USER':'root',
'PASSWORD':'admin',
}
-在init文件中:
import pymysql
pymysql.install_as_MySQLdb()
-在models中,寫類,寫類的屬性
#自增,int,主鍵
id = models.AutoField(primary_key=True)
#varchar,長度32
name = models.CharField(max_length=32)
#Decimal 長度5,小數位2位
price = models.DecimalField(max_digits=5, decimal_places=2)
#日期類型,可以為空
create_data=models.DateField(null=True)
-數據庫遷移:
python3 manage.py makemigrations --->只是對數據變更,做記錄
python3 manage.py migrate ---->把變更,同步到數據庫
-新增表,刪除表,新增字段,刪除字段---->執行數據庫遷移的兩條命令就可以了
-單表增:
-兩種方式
-單表修改:
-先查詢出來,然后update(queryset對象的方法)
-對象要更新,用save方法
-單表刪除:
-先查詢出來,然后delete(queryset對象和模型對象的方法)
*****用queryset刪除,修改的時候,一定要注意,數據是幾條
-刪除數據表中所有數據:Book.objece.all().delete()
-單表查詢
-all()
-filter(**kwargs)
-get(**kwargs) 有且只有一條數據
-exclude(**kwargs)
-order_by(*field)
-reverse()
-count()
-first()
-last()
-exists()
-values(*field)
-values_list(*field)
-distinct()
-單表基于雙下劃線模糊查詢
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")---->%python%
Book.objects.filter(title__endswith="py")----->%py
Book.objects.filter(title__startswith="py")---->py%
Book.objects.filter(title__icontains="python")--->忽略大小寫
Book.objects.filter(pub_date__year=2012,pub_date__month=12)
今日內容:
1 創建多表模型(詳情見代碼)
#用了OneToOneField和ForeignKey,模型表的字段,后面會自定加_id
# ManyToManyField會自動創建第三張表
# *************重點
# 一對一的關系:OneToOneField
# 一對多的關系:ForeignKey
# 多對多的關系:ManyToManyField
2 添加表記錄
1 一對多新增
-兩種方式:
-publish=對象
-publish_id=id
2 一對多刪除:同單表刪除
3 一對多修改:兩種方式,可以傳對象,可以傳id
4 一對一跟一對多一樣
5 多對多:
-add ----->可以傳對象,可以傳id,可以傳多個
-remove ----->可以傳對象,可以傳id,可以傳多個
-clear ---->沒有參數
-set ----->跟上面不一樣,必須傳列表,列表里面可以是對象,可以是id
3 基于對象的跨表查詢
1 一對一
正向:正向查詢按字段
反向:反向查詢按表名小寫
2 一對多
正向:正向查詢按字段
反向:反向按表名小寫_set.all()
3 多對多
正向:正向查詢按字段.all()
反向查詢:反向按表名小寫_set.all()
4******基于對象的查詢,多次查詢(子查詢)
4 基于雙下劃線的跨表查詢
-連表查詢
-一對一雙下劃線查詢
-正向:按字段,跨表可以在filter,也可以在values中
-反向:按表名小寫,跨表可以在filter,也可以在values中
作業:
1 圖書館的表模型創建好,插入一些數據
2 基于對象的查詢
3 基于雙下劃線的查詢
posted on 2018-11-28 17:29 fushuanglin 閱讀(108) 評論(0) 收藏 舉報
浙公網安備 33010602011771號