关键词:
-
再次明确orm与mysql的对应关系
orm mysql
类 表
类中的属性 表的字段
实例化对象 行记录(一行数据) -
方式1(不常用)
def create(request):
stu_obj = models.Student(
name = ‘牧羊小董‘,
age=21
) # 实例化一个对象
stu_obj.save() # 将和这个数据添加到数据库中
return HttpResponse("<h1>添加数据成功</h1>")
操作代码都是写道views相应的函数里面的,一下只写操作代码,位置都是一样的 -
models.Student.objects # objects可以称为一个控制器,这个控制器可以调用增删改查等其他方法,非常重要
?
stu_obj = models.Student.objects.create(
name=‘牧羊小董‘,
age=21
)
print(stu_obj) # Student object
# 通过万能的点获取它的属性
print(stu_obj.id) # 这条数据当前的id值
print(stu_obj.name) # 牧羊小董
print(stu_obj.age) # 21重要的点:以后我们对类实例化的对象比如上面的stu_obj,我们都称之为models对象
-
方式3(批量创建)
现在有200条行数据,我想将在这200条行数据插入到对应的表中,首先想到的就是for循环,循环插入。循环插入,你插入一次,就是与数据库交互一次,就会产生一次IO,这样循环插入的数据量越大,IO越多,效率越低。
# 批量创建
list1 = [models.Student(name=f‘牧羊小董i‘, age=21 + i) for i in range(20)]
obj = models.Student.objects.bulk_create(list1)
print(obj)
?
"""
打印的obj结果是:
[<Student: Student object>, <Student: Student object>, <Student: Student object>,
...
<Student: Student object>, <Student: Student object>, <Student: Student object>]
""" -
方式4(创建更新)
有则更新,无则添加
# 有的
models.Student.objects.update_or_create(
name =‘牧羊小董0‘, # 筛选判断条件
defaults=
‘age‘: 18,
)
?
?
# 没有的
models.Student.objects.update_or_create(
name=‘小计‘,
defaults=
‘age‘: 17,
)
单表操作— 简单查询
-
查询所有 all()
def all(request):
query_set = models.Student.objects.all()
print(query_set) # 返回一个QuerySet对象
print(query_set[1:5]) # 可以使用切片
for obj in query_set:
print(obj.name) # 遍历QuerySet对象,通过点获取里面每个models对象的name属性
return HttpResponse("<h1>数据查询完毕</h1>")
?
?
# 测试__str__功能
class Student(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
age = models.IntegerField()
?
def __str__(self):
return self.name
?
def all(request):
query_set = models.Student.objects.all()
for obj in query_set:
print(obj) # 遍历QuerySet对象,现在就直接打印name属性了
return HttpResponse("<h1>数据查询完毕</h1>")
?
操作代码都是写道views相应的函数里面的,一下只写操作代码,位置都是一样的另一个非常重要的对象:QuerSet对象,他是一个类似于列表的容器,可迭代的,里面的元素就是一个个的models对象。
-
按条件查询 filter ()
models.类名.objects.filter(条件) 返回的是QuerySet对象
query_set = models.Student.objects.filter(age=18)
print(query_set)
?
# 无论查询的结果是一个还是多个,都是返回QuerySet对象 -
按条件查找 get()
返回的都是models对象
get() 按条件查找,返回一个models对象,通过get查询的结果有且只能有一个
面试考过报错原因以及分析
obj = models.Student.objects.get(id=2)
print(obj) # 依照条件查询结果只有一个不报错
?
obj = models.Student.objects.get(age=20)
print(obj) # 依照条件查询结果可能是多个就会报错
报错:get() returned more than one Student -- it returned [这里是查询到的总数量]!
?
obj = models.Student.objects.get(id=2000)
print(obj) # 依照条件查询结果可能没有对应结果也会报错
报错:Student matching query does not exist.
单表操作—删
分为两种情况的删除 一个是QuerySet、一个是models
-
QuerySet对象
def del_(request): models.Student.objects.filter(age=20).delete() return HttpResponse("<h1>数据删除完毕</h1>")
-
models对象
def del_(request): models.Student.objects.get(id=2).delete() return HttpResponse("<h1>数据删除完毕</h1>")
-
表中数据全部删除
def del_(request): models.Student.objects.all().delete() return HttpResponse("<h1>数据删除完毕</h1>")
单表操作—改
-
方式1(update_or_create)
models.Student.objects.update_or_create( name =‘牧羊小董0‘, # 筛选判断条件 defaults= ‘age‘: 18, )
-
方式2(update)
models.Student.objects.filter(id=1).update(name=‘牧羊小董‘)
补充字段
坑:给已经创建好并有数据的表添加新字段的问题
我们已经创建好一个Student表了,并且也往里面插入了一些数据,此时我们要想给Student表添加一个新的字段,比如sex字段,怎么做?
先在models.py里面的Student类里面写上sex字段
class Student(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=16) age = models.IntegerField() sex = models.CharField(max_length=6) def __str__(self): return self.name
然后你在Terminal里面输入命令:
python manage.py makemigrations
然后显示下面的结果:
原因:原表已经存在数据了,你想新增字段,那么原表的这些数据对应的这个字段的内容是什么?
你也没有设置这个字段默认为null,所以产生了歧义。
解决方式:
1、选择1:退出,咱们去对sex字段设置一个默认值。
sex = models.CharField(max_length=6, default=‘male‘)
2、选择2:退出。咱们去对sex字段设置一个参数:null=True
sex = models.CharField(max_length=6, null=True)
3、删除表重新构建表结构
然后重新打开Terminal,输入命令:
python manage.py makemigrations python manage.py migrate
mybatis实现单表增删改查操作
mybatis是对持久层进行了封装、mybatis文档地址:https://mybatis.org/mybatis-3/zh/index.html下面实现单表的增删改查操作。1.新建maven项目命名为mybatis、并在pom.xml中引入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.ap 查看详情
orm单表操作查询多表操作查询及增删改查(代码片段)
------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明。乐观不是目的,而是人生旅途中的一种态度。 多表操作创建模型实例:我们来假定下面这些概念,字段和关系作者模型:一个作... 查看详情
django学习第6篇:django之orm单表操作(增删改查)(代码片段)
django之数据库表的单表查询一、添加表记录对于单表有两种方式#添加数据的两种方式#方式一:实例化对象就是一条表记录Frank_obj=models.Student(name="海东",course="python",birth="2000-9-9",fenshu=80)Frank_obj.save()#方式二:models.Student.objects.creat... 查看详情
数据库的增删改单表查询(代码片段)
数据库的增删改 插入数据INSERT 更新数据UPDATE 删除数据DELETE插入数据INSERT1.插入完整数据(顺序插入)语法一:INSERTINTO表名(字段1,字段2,字段3...字段n)VA... 查看详情
django学习第6篇:django之orm单表操作(增删改查)(代码片段)
django之数据库表的单表查询一、添加表记录对于单表有两种方式#添加数据的两种方式#方式一:实例化对象就是一条表记录Frank_obj=models.Student(name="海东",course="python",birth="2000-9-9",fenshu=80)Frank_obj.save()#方式二:models.Student.objects.creat... 查看详情
mybatis单表的增删改查(代码片段)
...:国学周更-心性养成之路🥭本文内容:MyBatis单表的增删改查本文目录结果映射ResultMap使用selectOne方法查询单条记录使用insert方法添加记录 主键非自增长 主键值由数据库自增长使用delete方法删除记录使用update方法... 查看详情
60django项目单表(出版社)的增删改查
主要内容:1.常用的orm查询语句 查询: 类名.objects.all() #查询全部,返回一个列表 类名.objects.filter() 查看详情
oracle表的crud(增删改查)单表
...e=90whereSno=‘9521105’;有关于查找查询可以分为三种类型:单表查询,多表查询和子查询这里主要讲的是单表查询select属性1,属性2,…from表名[where检索条件][orderby排序依据列][groupby分组依据列][having组提取条件]1单表查询纵向查... 查看详情
浅谈增删改查的意义
...非就是一个界面上数据的增删改查,它可能就是针对一张单表的操作,了不起就是对几张表的增删改,soeasy!最近是越发感受到:信息管理系统的精髓,除了数据库设计外,就是“无比简单&rdq 查看详情
django---进阶5(代码片段)
...)联表查询(基于双下划线的跨表查询)周末作业单表操作#django自带的sqlite3数据库对日期格式不是很敏感处理的时候容易出错#增#res=models.User.objects.create(name=‘jason‘,age=18,re 查看详情
orm对单表的增删改查
表记录的增加:1)b=Book(name=‘python‘,price=99) b.save()2)Book.objects.create(name=‘python‘,price=99) https://www.cnblogs.com/tangjianyu/p/8018745.html 查看详情
1.完整语段的增删改2.单表查询3.多表查询
增语法‘‘‘1.所有数据按顺序插入insert[into]表名values(值1,...,值n)[,...,(值1,...,值n)];2.指定字段匹配插入,可以任意顺序insert[into]表名(字段2,字段1,...,字段n)values(值2,值1,...,值n)[,...,(值2,值1,...,值n)];3.插入查询结果insert[into]表1(字段1,... 查看详情
mybatis单表常用增删改查
1.编写sql表,插入原始数据1--删除表2DROPTABLEtestA;3--创建表4CREATETABLEtestA(5idINTAUTO_INCREMENTPRIMARYKEY,6usernameVARCHAR(50),7date1DATETIME,8str_dateVARCHAR(50),9date_strDATE10)11--插入数据12INSERTINTOtestA(username, 查看详情
linq创建连接简单增删改查
...它允许编写C#或者VisualBasic代码以查询数据库相同的方式操作内存数据。全名:LinQtosql类:集成化的数据访问类。会自动生成,进行数据库数据访问。LinQ的创建:1、链接数据库:添加--添加新项--找到LINQtoSQL类--名字就叫数据库的... 查看详情
简单的表内容的增删改操作
表内容的增加操作:insertintostudentvalues(‘1‘,‘小明‘)表内容的修改操作:updatestudentsetsname=‘djdjdj‘wheresno=‘1‘表内容的删除操作:deletefromstudentwheresno=‘1‘ 查看详情
orm的单表增删改查
一、与数据库的映射关系 类名<------->表名 属性<------->字段属性的约束<------->字段的类型 实例对象... 查看详情
django之单表的增删改查(代码片段)
books/urls.py"""booksURLConfigurationThe`urlpatterns`listroutesURLstoviews.Formoreinformationpleasesee:https://docs.djangoproject.com/en/1.11/topics/http/urls/Examples:Functionviews1.Addan 查看详情
hibernate--单表的增删改查
语法:如果利用Hibernate修改数据库时,需要使用事务处理,一个事务提交时才真正将修改过的记录更新到数据库中。1、增加记录Sessionsession=HibernateSessionFactory.getSession();Transactiontran=session.beginTransaction();//定义事... 查看详情