python-django测试数据库操作 作者:马育民 • 2019-03-01 15:09 • 阅读:10064 # 概述 本文介绍通过cmd命令测试数据库 # 进入django的shell ``` python manage.py shell ``` 执行结果如下: [![](http://www.malaoshi.top/upload/0/0/1EF2sy26alFG.png)](http://www.malaoshi.top/upload/0/0/1EF2sy26alFG.png) # 添加记录 在命令窗口中,执行下面代码: ``` from blog.models import User user=User() user.id='1' user.username='admin' user.password='123456' #执行保存操作 user.save() ``` **注意:** 对象中的属性要和类属性一直 执行后窗口没有提示 **查看数据库:** [![](http://www.malaoshi.top/upload/0/0/1EF2sy9usP7K.png)](http://www.malaoshi.top/upload/0/0/1EF2sy9usP7K.png) 添加成功 # orm的特点 在上面的代码中,通过面向对象的编程方式,去操作数据库,是ORM的一大特性 其本质在调用save()方法时,将对象中的属性和值转化成insert sql语句,并执行sql语句对数据库进行操作 不需要编写sql语句 ### 在对象中添加一个不存在的类属性 在命令窗口中,执行下面代码: ``` from blog.models import User user=User() user.id='2' user.username='123' #下面的属性与model类属性不匹配 user.aaaaa='123456' #执行保存操作 user.save() ``` 执行后窗口没有提示 **查看数据库** [![](http://www.malaoshi.top/upload/0/0/1EF2sympfn80.png)](http://www.malaoshi.top/upload/0/0/1EF2sympfn80.png) 新添加的记录中只有id和username字段是有值的 **说明:** 在执行save()方法时,是根据 **类属性名**,找到相匹配的 **实例属性**,然后生成的insert sql语句 # 查询所有记录 在命令窗口中,执行下面代码: ``` from blog.models import User User.objects.all() ``` 执行结果如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2syJQH2gR.png)](http://www.malaoshi.top/upload/0/0/1EF2syJQH2gR.png) 返回list,里面只有一个User对象 **继续执行**,打印list中对象的信息 ``` from blog.models import User for item in User.objects.all(): print(item.username,item.password) ``` [![](http://www.malaoshi.top/upload/0/0/1EF2syNxDZzU.png)](http://www.malaoshi.top/upload/0/0/1EF2syNxDZzU.png) # 根据主键查询 由于是根据主键查询,所以查询结果分两种情况,一种是返回一条记录,一种是返回0条记录 在命令窗口中,执行下面代码: ``` from blog.models import User user=User.objects.get(pk='1') user.username user.password ``` **执行结果如下图:** [![](http://www.malaoshi.top/upload/0/0/1EF2syQShGlZ.png)](http://www.malaoshi.top/upload/0/0/1EF2syQShGlZ.png) **说明:** 根据id进行查询 ### 查询不存在的主键会报错 在命令窗口中,执行下面代码: ``` from blog.models import User user=User.objects.get(pk='abc234') ``` 查询数据库中不存在的id,会报错,如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2t3q18EvN.png)](http://www.malaoshi.top/upload/0/0/1EF2t3q18EvN.png) # 根据条件查询(不推荐) 查询username是admin的记录 在命令窗口中,执行下面代码: ``` from blog.models import User #根据id查询 user=User.objects.get(username='admin') user.username user.password ``` **注意:** 1. 查询不存在的记录会报错 [![](http://www.malaoshi.top/upload/0/0/1EF2t4DN7Gal.png)](http://www.malaoshi.top/upload/0/0/1EF2t4DN7Gal.png) 2. 当返回多条记录时,会报错,如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2t3y3QvHT.png)](http://www.malaoshi.top/upload/0/0/1EF2t3y3QvHT.png) # 根据条件查询(推荐) 上面的方法使用不当会报错,用这种方法则不会 查询username是admin的记录,在命令窗口中,执行下面代码: ``` from blog.models import User users=User.objects.filter(username='admin') for item in users: print(item.username,item.password) ``` # 修改记录 将id是1的uesrname改成root,在命令窗口中,执行下面代码: ``` user=User.objects.get(id='1') user.username='root' user.save() ``` # 根据id删除记录 ``` from blog.models import User user=User() user.id=1 user.delete() ``` 删除成功,如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2t41Qv34W.png)](http://www.malaoshi.top/upload/0/0/1EF2t41Qv34W.png) 删除不存在的记录,如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2t4F2lVQo.png)](http://www.malaoshi.top/upload/0/0/1EF2t4F2lVQo.png) # 根据条件删除记录 删除username是admin的记录 ``` User.objects.filter(username='admin').delete() ``` **注意:** 只使用一条 SQL 语句一次性删除所有对象,而并不是分别删除每个对象 执行结果如下图: [![](http://www.malaoshi.top/upload/0/0/1EF2t4QFTxQs.png)](http://www.malaoshi.top/upload/0/0/1EF2t4QFTxQs.png) 原文出处:http://malaoshi.top/show_1EF2sybeelUl.html