前言
ORM虽然提高了开发效率,并且降低了数据操作与代码之间的耦合,但是有利就有弊
优点:
- 实现了代码与数据操作的解耦合
- 不需自己写原生sql, 提高开发效率
- 防止SQL注入, 通过对象操作的方式,默认就是防止sql注入的。
缺点:
- 牺牲性能, 对象到原生SQL势必会有转换消耗,对性能有一定的影响
- 复杂语句力不从心, 一些复杂的sql语句,用orm对象操作的方式很难实现,就还得用原生sql
讲Django为什么要用ORM?
因为Django的models基于架构ORM实现的。
增
方法一:临时存在一个实例化对象中,要想数据库生效,必须执行save()函数
from app01 import models
new_obj = models.Account(
id = 2,
name = 'admin',
bday = '1928-10-01',
tags = '美丽的一天,不是吗?'
)
new_obj.save()
方法二:直接增加
下方的ret有返回值,ret 是创建的新的记录的model对象
ret = models.Account.objects.create(
id = 5,
name = 'root',
bday = '1969-10-01',
tags = '哇哦,time.time()还没出现嘞'
)
批量增加语句bulk_create
from app01 import models
obj_list = []
for i in range(20):
obj = models.Book(
title=f'活着{i}',
price=20+i,
publish_date=f'2018-03-{i+1}',
publish='yh出版社'
)
obj_list.append(obj)
models.Book.objects.bulk_create(obj_list) # 批量创建
删
# 方法一
obj = models.Account.objects.get(id=1).delete()
# 方法二
obj = models.Account.objects.get(id=1)
obj.delete()
改
# 方法一
models.Account.objects.get(id=2).update(name='tomcat')
# 方法二
obj = models.Account.objects.get(id=2)
obj.name='tomcat'
obj.save()
查
a = models.Account.objects.all()
print(type(a))
print(a.values)
b = models.Account.objects.get(id=1)
print(b)
结果
因为我只有四个数据,所以a.values只有四个
<class 'django.db.models.query.QuerySet'>
<bound method QuerySet.values of <QuerySet [<Account: Account object>, <Account: Account object>, <Account: Account object>, <Account: Account object>]>>
Account object
如果想看更详细的内容,请点击这里
当然增删改查的方法不只这些,通过filter也可以实现,不要那么死板,想想其它可能性
简单查询:filter() -- 结果是queryset类型的数据里面是一个个的model对象,类似于列表
models.UserInfo.objects.filter(id=7).delete()
#queryset对象调用
models.UserInfo.objects.filter(id=7)[0].delete()
#model对象调用