数据表操作
数据表操作主要为增、删、改、查、执行SQL语句和实现数据库事务等操作
- 数据新增:有模型实例化对象调用内置方法实现数据新增
- 数据修改必须执行一次数据查询,在对查询结果进行修改操作,常用方法有:模型实例化、update方法和批量更新bulk_update
- 数据删除必须执行一次数据查询,再查询结果进行删除操作,若删除的数据设有外键字段,则删除结果由外键的删除模式设定
- 数据查询分为单表查询和多表查询,Django提供多种不同查询的API方法
- 执行SQL语句有3中方法实现:extra、raw和execute,其中extra和raw只能实现数据查询,具有一定局限性;而execute无须经过ORM框架处理,能够执行所有SQL语句,但很容易受到SQL注入攻击。
- 数据库事务是指作为单个逻辑执行的一系列操作,这些操作具有原子性,即这些操作要么完全执行,要么完全不执行,常用语银行转账和火车票抢购等。
数据新增
方法示例:
v = Vocation()
v.job = '测试工程师'
v.title = '系统测试'
v.payment = 0
v.name_id = 3
v.save()
v=Vocation.objects.create(job='测试工程师',titile='系统测试',payment=0,name_id=3)
d = dict(job='测试工程师',title='系统测试',payment=0,name_id=3)
v=Vocation.objects.create(**d)
v = Vocation(job='测试工程师',titile='系统测试',payment=0,name_id=3)
v.save()
在执行数据插入时,为了保证数据有效性,需要对数据进行去重判断,为了简化这一过程,Django提供了get_or_create方法:
d = dict(job='测试工程师',title='系统测试',payment=0,name_id=3)
v=Vocation.objects.get_or_create(**d)
同样思路,Django还提供了update_or_create方法来判断数据是否存在,若存在则更新,若不存在则新增。
还可以对某个模型执行数据批量插入操作,使用bulk_create方法实现:
v1= Vocation(job='财务',title='会计',payment=0,name_id=1)
v2= Vocation(job='财务',title='出纳',payment=0,name_id=1)
ojb_list = [v1, v2]
Vocation.objects.bulk_create(ojb_list)
数据修改
数据修改方式与数据新增步骤大致相同,唯一区别在于需要先进行一次数据查询,然后将对象的属性进行赋值处理,代码如下:
v = Vocation.objects.get(id=1)
v.payment = 20000
v.save()
其他方法:
Vocation.objects.filter(job='测试工程师').update(job='测试员')
d= dict(job='测试员')
Vocation.objects.filter(job='测试工程师').update(**d)
Vocation.objects.update(payment=666)
上面这个不进行查询,对全表所有数据全部进行更新
下面还可以使用内置F方法
frome django.db.models import