新建数据
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,数据库修改为如下: