django操作数据库数据,做增删改查
插入数据
from sign.models import Event, Guest
from datetime import datetime
1.两步走
e1 = Event(id=3,name='nubia X Pro 发布会',limit=2000,status=True,address='厦门',start_time=datetime(2019,8,10,14,0,0))
e1.save()
2.一步搞定
Event.objects.create(id=7,name='nubia9',limit=9000,status=False,address='xiamen',start_time=datetime(2019,1,10,14,0,0))
Event.objects.create(id=3,name='nubia X Pro',limit=2000,status=True,address='xiamen',start_time=datetime(2019,08,10,14,0,0))
Guest.objects.create(realname='张三',phone=12345001101,email='zhangs@mail.com',sign=False,event_id=2)
Guest.objects.create(realname='李四',phone=13900000000,email='lis@mail.com',sign=True,event_id=4)
Guest.objects.create(realname='康平汆',phone=13600805241,email='kpc@mail.com',sign=True,event_id=5)
Guest.objects.create(realname='vivian',phone=13913301888,email='vv@mail.com',sign=True,event_id=3)
Guest.objects.create(realname='zhangailing',phone=13913301321,email='zal@mail.com',sign=False,event_id=7)
Guest.objects.create(realname='dulala',phone=13913301322,email='dll@mail.com',sign=False,event_id=7)
Guest.objects.create(realname='adu',phone=13999301322,email='ad@mail.com',sign=True,event_id=7)
需要说明的是,表的 id 字段已经设置了自增,所以,该字段为空可以添加数据,但在创建嘉宾时数据时
需要指定关联的发布会 id。Event 表指定了 id=3,Guest 表指定 event_id=3,所以嘉宾 andy 对应的是红米 MAX发布会
查询数据
table.objects.get()
方法用于从数据库表中取得一条匹配的结果,返回一个对象,如果记录不存在的话,那
么它会报 DoesNotExist 类型错误
--get完全匹配
e3=Event.objects.get(id=3)
e3.name
'nubia X Pro 发布会'
Event.objects.get(id=3).address
'厦门'
Guest.objects.get(phone='13600805241')
<Guest: 康平汆>
Guest.objects.get(phone='13600805241').event
<Event: 红米 MAX 发布会>
g.realname
'康平汆'
Guest.objects.get(phone='13600805241',sign=1) 多个条件
<Guest: 康平汆>
table.objects.filter()
方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会
返回[]。
Event.objects.filter(id=1)
<QuerySet [<Event: 努比亚X发布会>]>
Event.objects.filter(name='nubia X Pro 发布会').address
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'address'
--filter模糊匹配
在 name 和 contains 之间用双下划线。这里,contains 部分会被 Django 翻译成 LIKE 语句。
e=Event.objects.filter(name__contains='nubia')
e
<QuerySet [<Event: nubia X Pro 发布会>, <Event: nubia 红魔 发布会>]>
删除数据
查询 phone='13611001101' 的嘉宾,通过 delete()方法删除
g1=Guest.objects.get(email='lis@mail.com')
g1.delete()
(1, {'sign.Guest': 1})
g1
<Guest: 李四>
g1=Guest.objects.get(email='lis@mail.com')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "D:Python37libsite-packagesdjangodbmodelsmanager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:Python37libsite-packagesdjangodbmodelsquery.py", line 408, in get
self.model._meta.object_name
sign.models.Guest.DoesNotExist: Guest matching query does not exist.
更新数据
查询 phone='13611001101' 的嘉宾,更新 realname='andy2'
法1
g2=Guest.objects.get(phone='13611001101')
g2
<Guest: andy>
g2.realname='andy2'
g2
<Guest: andy2>
法2
g2.save() 没有保存的话,不会刷新到磁盘(不会落库)
Guest.objects.select_for_update().filter(phone='13611001101').update(realname='andy')
查询条件可以为多个
Guest.objects.select_for_update().filter(phone='13611001101',sign=0).update(realname='andy2')