WEB接口开发与自动化测试-读书笔记8 练习数据库表操作

一、基本数据访问

本节课我们学习,不通过SQL语句操作数据库,使用Django提供的高级Python API。接下来练习数据库表的操作,运行manage.py提供的shell命令。

1、进入shell模式

打开CMD.EXE终端

\guest> python manage.py shell
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

2、操作Django模型

from sign.models import Event,Guest
导入sign应用下models.py中的Event表和Guest表

table.objects.all()
获得table(Event、Guest表)中的所有对象

CMD.EXE终端输入:

>>> from sign.models import Event, Guest
>>> Event.objects.all()
<QuerySet [<Event: 华为 Mate30 发布会>]>
>>> Guest.objects.all()
<QuerySet [<Guest: jack>]>

3、插入数据

CMD.EXE终端输入:

>>> from datetime import datetime
>>> el = Event(id=2,name='红米Pro发布会',limit=2000,status=True,address='北京水立方',start_time=datetime(2019,12,13,10,0,0))
>>> el.save()
C:\Program Files\Python38\lib\site-packages\django\db\models\fields\__init__.py:1424: RuntimeWarning: DateTimeField Event.start_time received a naive datetime (2019-12-13 10:00:00) while time zone support is active.
  RuntimeWarning)
  1. start_time字段需要设置日期时间,所以先导入datetime.datetime()方法;
  2. 当保存数据时,看到:warnings.warn("DateTimeField %s received a naive datetime (%s),修改/guest/settings.py文件,设置USE_TZ=False,忽略结尾时间警告信息。
  3. 修改settings.py文件并保存,执行“quit()”命令退出shell模式,重新进入,设置可生效。

通过table.objects.create()方法将创建和保存两步合为一步,方法如下:
CMD.EXE终端输入:

>>> Event.objects.create(id=3,name='红米 K30 发布会',limit=2000,status=True,address='北京会展中心',start_time=datetime(2019,12,14,10,0,0))
<Event: 红米 K30 发布会>
>>> Guest.objects.create(realname='andy',phone=13611001101,email='andy@mail.com',sign=False,event_id=3)
<Guest: andy>
>>>

Event指定id=3、Guest指定event_id=3,将两者id关联,所以嘉宾“andy”对应的是“红米 K30 发布会”。

4、查询数据

table.objects.get()方法用于从数据库查询一条匹配结果。
CMD.EXE终端:

# 使用get()查询name=红米MAX发布会的记录
>>> e1 = Event.objects.get(name='红米 K30 发布会')
># 返回的结果e1是个对象
>>> e1
<Event: 红米 K30 发布会>
# 从e1对象获取发布会地址
>>> e1.address
'北京会展中心'
# 从e1对象获取start_time的值
>>> e1.start_time
datetime.datetime(2019, 12, 14, 10, 0)
# 也可以不赋值给e1,而是直接在get()方法后加上字段名来获取对应的值
>>> Event.objects.get(name='红米 K30 发布会').status
True
# 同理查询红米MAX发布会的人数
>>> Event.objects.get(name='红米 K30 发布会').limit
2000
 如果查询条件结果不存在则会报错DoesNotExist
>>> Event.objects.get(name='发布会').address
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Program Files\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Program Files\Python38\lib\site-packages\django\db\models\query.py", line 406, in get
    raise self.model.DoesNotExist(
sign.models.Event.DoesNotExist: Event matching query does not exist.
>>>

table.objects.filter()方法用于从数据库查询匹配的结果。
CMD.EXE终端:

# 注意name和contains之间是双下划线
>>> e2 = Event.objects.filter(name__contains='发布会')
>>> e2
<QuerySet [<Event: 华为 Mate30 发布会>, <Event: 红米Pro发布会>, <Event: 红米 K30 发布会>]>

通过嘉宾查询其关联的发布会信息。
CMD.EXE终端:

>>> g1 = Guest.objects.get(phone='13611001101')
# 关联查询phone为136……嘉宾所对应的发布会信息event
>>> g1.event
<Event: 红米 K30 发布会>
#查询这位嘉宾所参加的发布会名称
>>> g1.event.name
'红米 K30 发布会'
#查询这位嘉宾所参加的发布会地址
>>> g1.event.address
'北京会展中心'

5、删除数据

通过delete()方法删除
CMD.EXE终端:

#第一种方法
>>> g2 = Guest.objects.get(phone='13611001101')
>>> g2.delete()
(1, {'sign.Guest': 1})
#第二种方法
>>> Guest.objects.get(phone='13611001101').delete()``
(1, {'sign.Guest': 1})

6、更新数据

#查询phone='13611001101'的嘉宾,更新realname='andy2'
>>> g3=Guest.objects.get(phone='13611001101')
>>> g3.realname='andy2'
>>> g3.save()
#直接通过update()方法更新查询结果
>>>Guest.objects.select_for_update().filter(phone='13611001101').update(realname='andy')
1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值