Django 模型models

1. 模型models 

模型就是MTV开发模式的'M',是数据库系统

django可以直接使用sql原生语句

比如 connet = pymysql.connect(name='',password='',user='',host='')

  cursor = connet.cursor()

  cursor.execute('select * from dbname  where ..')

  connet.close()

 

但是不太好,不适用与所有的数据库系统,而且有风险

 

2. 使用models,那么必须建立app

python manage.py startapp books(应用名)

注册app,进入settings.py文件注册app

 

3. 关系映射模型ORM

django的models处理结果都是对象,而我们是使用关系型数据库,那么需要把这种对象操作映射成关系型数据库的sql语句

 

4. 检查模型是否正确

python manage.py check

如上截图所示,才是正确的模型设置;否则会有报错信息

 

5. 数据迁移

python manage.py makemigrations    迁移所有的数据库,可以再应用(app)里面的migrations目录下的 0001_initial.py 文件中查看迁移结果

python manage.py makemigrations books   迁移books应用

 

6. 上面的的makemigrations,完成迁移的命令,但是没有真正的迁移,还需要以下命令,migrate

python manage.py migrate

python manage.py migrate books

 

 

 

二、基本语句以及对应的sql语句

模型中的数据库名Publisher为例;Publisher也就是生成了表格books_publisher app名+models中的类名

(1) 插入数据

p1 = Publisher(name='Apress',address='2855 Telegraph Avenue',city='Berkeley',state_province='CA',country='USA',website='http://ww/apress.com')

这样还没有插入数据库表格中,还需要保存结果

p1.save()

 

另外一种插入方式:

p3 = Publisher.objects.create(name='APeer',address='234 Tlese Aveneus',city='Berykly',state_province='CA',country='USA',website='http://www.asdf.com')

这种方式不用save()

 

2. 得到表格中所有数据

publisher_list = Publisher.objects.all()

得到的是数据库中记录的对象,Queryset,是一个列表

 

3. 删选一些数据

Publisher.objects.filter(country='USA')
Publisher.objects.filter(country__contains='USA')

删选country中包含‘USA’的记录对象,两个下划线__contains,  和sql语句中的 like ‘%USA%’

Publisher.objects.filter(name__contains='press')[0].name

还有__icontains,忽略大小写,__startswith, __endswith,    __range(sql between)

filter得到的也是记录对象的列表

 

得到一个数据:

Publisher.objects.get(name='Apress')

得到的是一个记录对象,如果有多个符合或者没有符合的都会报错

 

4.排序 order_by()

 Publisher.objects.order_by('name')

逆序 order_by('-name') ;排序的字段加上 '-' 号

 

5. 更新数据

Publisher.objects.filter(id=1).update(name='Apress')
Publisher.objects.filter(country='USA').update(country='U.S.A')

还可以

>>> p = Publisher.objects.get(name='Apress')
>>> p.name ='Apress Publishing'
>>> p.save()

这样不是改变name一个字段数据,而是跟新了所有字段数据

 

6.删除数据

Publisher.objects.filter(id=3).delete()

清空数据表

Publisher.objects.all().delete()

谨慎使用

 

posted @ 2019-03-27 14:06  韩文林  阅读(194)  评论(0编辑  收藏  举报