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:\Python37\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:\Python37\lib\site-packages\django\db\models\query.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\')