提示:以下是本篇文章正文内容。
代码如下:
form django.db import models
class Modelname(models.Model):
# 创建模型类并继承models.Model
# 一个类就是数据库的一张表
field1 = models.XXXfield(max_lenge=10,verbose_name='haha'
field = models.XXXfield()
class Meta():
# 为这个类定义一个说明
verbose_name = XXX
# 不加这个的话在我们的verbose_name在admin里面会被自动加上s
verbose_name_plural = XXX
通常在我们的表里面可以加一个add_time属性,用来记录这条记录是什么时候添加进的,
from datetime import datetime
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加时间"
class Meta:
# Django会帮我们创建这个表
abstract = True
class Course(BaseModel):
'''这里写属性'''
'''外键'''
class Lesson(BaseModel):
course = models.ForeignKey(Course,on_delete=models.CASCADE)
'''这里必须注意第一个参数是要关联的外键,
第二个参数是一定要写的,用来设置当Course被删除的时候,
外键怎么处理,CASCADE表示如果对应的课程被删除,那么外键的
记录也会级联的删除,而一种SET_NULL属性是指课程被删除后
这个外键这一列被置空,它必须和```null = True,blank = True```
连用,否则都不能为空怎么置空呢
Python、PHP、Java是一种开发语言,而MySQL、SQL Server则采用数据库语言,不同语言之间如何实现互操作。
SQL语言包括包括数据定义语言DDL、数据控制语言DCL、数据查询语言DQL、数据操作语言DML等,例如INSERT、DELETE、SELECT、UPDATE操作。
作为开发人员,应该把精力放在核心业务代码的编写上面,而不应该花太多精力跟数据库语言打交道。
ORM(Object-Relational Mapping,对象关系映射)技术可以看做是开发者和数据库之间的桥梁,用于实现数据库和
编程语言之间的映射,本质上来看,ORM就是将SQL操作和编程语言操作做了一个翻译。
通过ORM技术来操作数据库,使得开发者无需接触SQL语句,而直接操作对象的属性和方法,大大提高了开发效率。
orm的功能
AutoField:一个自动递增的整形字段,通常用于主键
CharField:字符串字段,用于输入较短的字符,对应与HTML里面
TextField:文本字段,用于输入较多的字符,对应html标签 ;
EmailField:邮箱字段,用于输入带有Email格式的字符
DateFiled
TimeFiled
DateTimeField:日期字段,支持时间输入
ImageField:用于上传图片并验证图片合法性,需定义upload_to参数,使用本字段需安装python pillow等图片库
IntegerField:整数字段,用于保持整数信息
属性
primary_key:设置True or False,定义此字段是否为主键
default:设置默认值,可以设置默认的文本、时间、图片、时间等
null:设置True or False,是否允许数据库字段为Null,默认为False
blank:设置True or False,定义是否运行用户不输入,默认为False;若为True,则用户可以不输入此字段
max_length:设置默认长度,一般在CharField、TextField、EmailField等文本字段设置
verbose_name:设置该字段的名称,所有字段都可以设置,在Web页面会显示出来(例如将英文显示为中文)
choices:设置该字段的可选值,本字段的值是一个二维元素的元祖;元素的第1个值为实际存储的值,第2个值为HTML页面显示的值
upload_to:设置上传路径,ImageField和FileField字段需要设置此参数,如果路径不存在,会自动创建
1. verbose_name:设置对象名称(例如usecms),若没有设置,则默认为该类名的小写分词形式,例如类名为CamelCase会被转换为camel case;
2.verbose_name_plural:设置对象名称复数(例如usercms),一般设置跟verbose_name一样,verbose_name_plural=verbose_name否则会默认加s;
3. db_table:设置映射的数据表名,默认为“应用名_模型名”,即用该模型所在app的名称加本模型类的名称
4.proxy:设置True or False,设置本模型及所有继承本模型的子模型是否为代理模型;
5. abstract:设置True or False,设置本模型类是否为抽象基类;如果是抽象基类,那么是不会创建这张表的,这张表用来作为基类被其他的表继承
modelname.object.all()取出所有的数据
modelname.object.get(pk=id)查询出符合筛选条件数据(一条),如果查到多条或者没有查到会报错
modelname.object.filter(....)查询出符合筛选条件的数据集(一条或者多条),如果对象不存在会返回一个空的列表,而不会报错。
ModelName.Objects.exclude( )返会不符合筛选条件的数据集
代码如下:
#常规的赋值增加
field1 = models.CharField()
field2 = modelsEmailField()
modelname.object.save()
#or 利用create方法
modelname.object.create(field1=models.CharField())
user_cms = UserCMS.objects.create(username=username, password=password)
在查询的方法后面加上.delete()
代码如下:
ModelName.Objects.all( ).order_by('xxx')
代码如下:
#ModelName.Objects.all( ).order_by('xxx')[a:b]
all_interviews = Interview.objects.all().order_by('-read_counts')[:6]
recommended_interviews = Interview.objects.filter(company=recommended_tag).exclude(id=int(interview_id)).order_by('-read_counts')[:3]