1.ORM是什么?
1.对象关系映射
类 --> 数据表
对象 --> 数据行
属性 --> 字段
2.Django中如何连接数据库.
1.手动建立一个新的数据库
2.告诉Django要连接那个数据
在setting.py文件下连接数据库:
DATABASES ={
'default':{
'ENDING':'django.db.backends.mysql',
'NAME':'db2',
'HOST':'127.0.0.1'
'PORT':3306
'USER':'root'
'PASSWORD':'123'
}}
3.在__init__.py下导入pymysql,告诉Django用什么模块连接MySQL
1.import pymysql
2.pymysql.install_as_MySQLdb()
4.在app下的models.py文件中建立类
类一定要继承models.Model
5.执行两个命令:
1.python manage.py makemigrations --> 查看model.py文件中的内容是否 有变动
2.python manage.py migrate --> 把改动的记录翻译成SQL语句,并执行
3.单表的增删改查
1.查询
Class.objects.get(条件=值)返回一个对象,查不到,或查到多条都会报错,不推荐使用
Class.objects.filter(条件=值)
Class.objects.all()
2.删.
Class.objects.get(条件=值).delete()
Class.objects.get(条件=值).delete()
3.增
Class.objects.create(name='值')
4.改.
1.基于对象的修改(不推荐)
class_obj = Class.objects.get(条件=值)
class_obj.name = '新值'
class_obj.save()
2.基于QuerySet的update修改
Class.objects.filter(条件=值).uodate(name='新值')
4.外键:
1.一对多建立连接:student = models.ForeignKey(to='Class',on_delete=models.CASCADE)
1.查询:
student_obj.student -->ORM中帮我们实现的,直接找到和班级关联的班级对象
student_obj.student_id -->数据库中真正保存的字段
2.外键的修改
1.student_obj.student = student_obj
student_obj.save()
2.student_obj.student_id = 1
student_obj.save()
2.多对多建立关联:student = models.ManyToManyField(to='表')
1.查询:author_obj.book.all()
2.添加:author_obj.book.add(1,2)
3.修改:author_obj.book.set([1,2])
4.删除:author_obj.book.clear()
5.常用字段:
1.AutoField() *****
2.IntegerField() *****
3.BooleanField
4.CharField() *****
5.TextField
6.EmailField
7.GenericIPAddressField
8.UUIDField() *****
9.FieldField
10.ImageField
11.DateTimeField *****
12.DateField *****
13.TimeField
14.FloatField
15.DecimalFeild *****
16.SmallIntegerField
17.PositiveSmallIntegerField
18.PositiveIntegerField
19.BigIntegerField
6.常用字段的参数
1. null=True 数据库中字段是否可以为空
2. default='默认值'
3. unique=True 唯一
4. primary_key=True 主键 数据库中字段是否为主键
5. max_length='数字'
6. auto_now=True -->自动把最后更新想时间保存
7. auto_now_add=True -->自动把创建时间保存
8. db_index=True -->把数据库中给当前字段创建索引
9. db_column='新列名' 数据库中字段的列名
10. chioce=(('1,男'),('2,女'),('3,人妖')
11. unique_for_date 数据库中字段[日期]部分是否可以建立唯一索引
12. unique_for_month 数据库中字段[月]部分是否可以建立唯一索引
13. unique_for_year 数据库中字段[年]部分是否可以建立唯一索引
DatetimeField和Datefield独有:
auto_now_add -->当前数据的创建时间
auto_now --> 当前数据的最后修改时间
7.带choice参数字段
1.get_字段名_display()
8.建表的云信息
class Meta:
db_table = '表名'
unique_together = (('ip','port'),)
index_together = (("pub_date","deadline"),)
9.必知必会13条:
1.返回QuerySet列表类型的
1.filter()
2.all()
3.exclude()
4.order_by()
5.reverse()
6.distinct()
7.values()
8.values_list()
2.返回具体对象
1.get()
2.first()
3.last()
3.返回布尔值
1.exists()
4.返回数字的
1.count()
10.万能的双下划线:
models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值 models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据 models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in models.Tb1.objects.filter(name__contains="ven") # 获取name字段包含"ven"的 models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and 类似的还有:startswith,istartswith, endswith, iendswith date字段还可以: models.Class.objects.filter(first_day__year=2017)
修改管理器(models.py)
导入新的包:from django.db import models
进行模糊查询
开始进行查找前我们先来认识filter()方法。
这是一个过滤器方法用于过滤掉不符合条件的元素。
值得一提的是其内自带方法函数的引用方式为‘__方法名称’。
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
举几个例子:
obj1 = UserInfo.objects.filter(user_name__contains='王')#以‘王’开头的user__name
obj2 = UserInfo.objects.filter(user_name__endswith='王')#以‘王’结尾的user__name
obj3 = UserInfo.objects.filter(id__gte=5)#ID大于等于5的
obj5 = UserInfo.objects.filter(id__exact=5)#id等于5的
obj6 = UserInfo.objects.filter(id__in=[1,3,5])#id等于1,3,5,的
1
2
3
4
5
exclude方法,排除选项。
obj8 = UserInfo.objects.filter(password='123456',id__gt=2).exclude(phone=188)
#找到符合filter的内容后排除phone等于188的,它的另一种写法为
from django.db.models import Q
obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))
1
2
3
4
计算和和最大值:
from django.db.models import Sum,Max,Min
obj = UserInfo.objects.aggregate(Sum('id'))
obj = UserInfo.objects.aggregate(Max('id'))
obj = UserInfo.objects.aggregate(Min('id'))
---------------------
作者:dreamingcrazy
来源:CSDN
原文:https://blog.csdn.net/dreamingcrazy/article/details/82595700
版权声明:本文为博主原创文章,转载请附上博文链接!