七、Django之orm增删改查数据

新建数据

UserInfo.objects.create(name="小郑", password="123", age=15, stu_id=2, tea_id=2)

假如现在我们想要新增一行数据,则需要在类下面写如下代码:

该语句相当于注释掉的sql语句,且注意,orm会自动帮我们填写自增字段id。 

然后在pycharm终端输入“python manage.py makemigrations”,会显示信息“No changes detected”。

 但实际上此时数据已经新建成功,我们通过navicate查询可以看到。

 此时,如果继续输入命令“python manage.py migrate”,会显示信息“No migrations to apply”

  但实际上新建数据的语句会被再次执行一次,我们通过navicate查询可以看到。

 所以请注意,“migrate”和“make migrations”执行其中一个就好,效果是一样的。

注意事项:

新建数据的话需要保证所有字段都有值。

譬如像刚才的操作一样,将UserInfo类中的name字段一直到tea_id字段都赋值。而其中的tea_id字段,因为我们在其括号里写了default=5,所以也可以只赋值name字段一直到stu_id字段。

以下为演示。

 

 而如果对于没有default的字段,我们也没有赋值的话,如以下代码:

 执行“migrate”命令后,会报错如下信息:

删除数据

类名.objects.all().delete()  # 删除所有数据
类名.objects.filter(筛选条件字段=某值).delete()  # 根据某个特定字段删除该行数据

以下为删除所有数据的演示:

原先数据库数据如下:

删除数据最好不要在models.py里操作。我们需要在views.py里定义函数并在函数里执行UserInfo.objects.all().delete()的代码。然后打开相应路径的浏览器从而调用views.py的函数。 

 

 可以看到,删除成功。

获取数据

当前数据库中内容如下:

获取全部数据

在models.py下写如下代码:

 随后在pycharm终端输入"makemigrations"命令,打印相应结果如下:

 我们可以看到,用orm获取数据,返回的是一个QuerySet类型,其实就相当于一个列表,列表里面存储着对象。即【对象1,对象2,……,对象n】,每个对象都是一行数据。

注意的是:1、不能写成print("数据的类型"+data_list),否则会报错“TypeError: can only concatenate str (not "QuerySet") to str”,意思是QuertSet对象不能与字符串进行拼接。

2、在终端输入"migrate"命令,是一样的查询效果。

按条件获取数据

在models.py中写代码如下:

 打印相关结果如下:

即,按类名.objects.filter(条件字段=某值)获取特定数据,即使满足条件的数据只有一行,依旧是存储成QuerySet类型并通过循环获取数据的。

而按类名.objects.filter(条件字段=某值).first(),就可以获取到object类型的数据并直接获取到数据。

注意:object类型依旧不可以和str进行拼接。

修改数据

最开始数据库数据如下:

 models.py相关代码如下:

 输入1,数据库修改为如下:

 输入2,数据库修改为如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸡鸭扣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值