Django -模型(Model)系统

1. 数据库配置

Django的Model(数据库模型) 是基于ORM(object relation mapping 对象关系映射表模式来操作的。

数据库用户的创建和授权及表使用步骤

解释器链接的是虚拟机中的Mysql数据库。
一般情况下,虚拟机中的mysql root账户不拿来操作表,我们需要自己创建一个账户并授权来操作我们的表。

步骤1:创建数据库用户(授权)

	- 	创建新的数据库并指明字符串编码
	
			create database Test charset=utf8;
			
	-	创建用户名test的数据库用户,并将Test下面的所有表授权给用户,支持远程访问
	
			必须在虚拟机里面的root账户里面授权
		
			grant all privileges on mydjango.* to '账户'@'%'(本地%为local) identified by '密码';
			
			刷新权限
			flush privileges;  
			
	-	数据库进入命名
			
			mysql -u用户名 -p密码 -A 数据库名

步骤2:配置MYSQL数据库信息

	①、setting里面 将原始的DATABASE注释掉然后添加新的
	
		DATABASE = {
			'default':{
				'ENGINE':'django.db.backends.mysql',
				'NAME':'创建的数据库名', #要存储数据的数据库名
				'USER':'mysql用户名',    #数据库的用户名
				'PASSWORD':'mysql密码',  #数据库的密码
				'HOST':'ip地址',      #链接的数据库ip地址
				'PORT':'3306',        #数据库端口
			}
		}
	②、在大项目项目文件夹里面的__init__.py里面添加两句代码
	
		# 需要在虚拟机我们存放项目的虚拟环境里面导入pymysql模块才能使用。添加后重启下项目。
		import pymysql
		pymsql.install_as_MySQLdb()

步骤3:在子项目里面的models.py里面创建类

	from django import models
	
	# 类名就是数据库中的表名
	
	class TABLE_name(models.Model):  #一定要继承models.Model  创建表
	
		#创建字段
		name = models.CharField(max_lenght=20)    #  字符串  必须设置字符串长度
		price = models.FloatField()                   
		pub_date = models.DateField()
		
		def __str__(self):
			return self.name  #在打印时调用__str__魔术方法,打印出name

步骤4:数据迁移

	在terminal环境下运行数据库:
	
		-- python manage.py migrations  [数据表名]    # 如果没有加数据表名就会创建所有表,若加了则创建指定表
		
		-- python manage.py migrate  [数据表名]     # 如果没有加数据表名就会迁移所有表,若加了则迁移指定表

在配置好前面两步后,后续操作就是在第3步和第4步之间来回操作。当我们创建的模型类中的字段有修改时都需要进行数据迁移才能实效。

即修改模型三部曲:
	1. 修改模型(创建模型)
	2. 运行`python manage.py makemigrations`创建迁移
	3. 运行`python manage.py migrate`迁移生效

2. 常用字段方法

		方法							   返回数据类型				作用
	模型类.objects.all()					QuerySet			返回表中所有数据
		
	模型类.objects.filter(xx)			QuerySet			返回符合条件的数据
		
	模型类.objects.exclude(xx="")		QuerySet			返回不符合条件的数据
		
	模型类.objects.order_by("")			QuerySet			对查询结果集进行排序  -为反序,不加-为正序      #里面要对字段用""包起来才行
		
	模型类.objects.values()				QuerySet			返回一个QuerySet 每个元素为一个字典
		
	模型类.objects.order_by("").reverse()	QuerySet		对排序的结果反转         #结合order_by来使用
		
	模型类.objects.get()					模型对象				返回一个满足条件的对象;
															如果没有找到符合条件的对象,会引发		 模型类.DoesNotExist异常; 
															如果找到多个,会引发模型类.MultiObjectsReturned 异常
															
	模型类.objects.count()				int					返回查询集中对象的数目
		
	模型类.objects.first()				模型对象				返回第一条数据
		
	模型类.objects.last()				模型对象				返回最后一条数据
		
	模型类.objects.exists()				bool				判断查询的数据是否存在
	 
	模型类.object.values_list("x","xx") QuerySet				返回一个QuerySet 每个元素为一个元组

	模型类.objects.only("")				QuerySet			返回一个QuerySet 每个元素为一个对象,同时其他字段也能拿到
		
	模型类.objects.defer("")				QuerySet			返回一个QuerySet 返回不符合条件的字段
		
	and	模型类.objects.filter(条件1,条件2)	QuerySet		返回一个QuerySet 每个元素为一个对象
		
	or  需要导入 from django.db.models import Q 
		模型类.objects.filter(Q(条件1)|Q(条件2))	QuerySet	返回一个QuerySet 每个元素为一个对象
		
	查询条件
			
	模型类.objects.filter(字段名__exact = "")	准确匹配,区分大小写
		
	模型类.objects.filter(字段名__iexact = "")	匹配,不区分大小写
		
	模型类.objects.filter(字段名__contans = "x")	字段名里面包含x的都匹配,区分大小写
		
	模型类.objects.filter(字段名__icontans = "x")字段名里面包含x的都匹配,不区分大小写
		
	模型类.objects.filter(字段名__in = [[],""])	指定值查询,可以使列表,可以是字符串,也可以是元组
		
	
	模型类.objects.filter(字段名__gt = "")	大于该数值的数据
		
	模型类.objects.filter(字段名__gte = "")	大于等于该数值的数据
		
	模型类.objects.filter(字段名__lt = "")	小于该数值的数据
		
	模型类.objects.filter(字段名__lte = "")	小于等于该数值的数据
		
	模型类.objects.filter(字段名__range =(a,b))	在这个范围内的数据
		
		
	聚合函数和分组
	
		from django.db.models import Count,Avg,Max,Min
		
		模型类.objects.value("字段名A").annotate(新名字=聚合函数名("字段名A"))
		
	
		__双下划线模糊查询

3. 单表操作

示例模型类:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值