我爱编程

Python web开发----->Django(数据模型处理

2018-04-14  本文已影响0人  城北有梦

    Python  web开发----->Django(数据模型处理,数据的CRUD)

一,和数据库的交互:

1,连接到指定数据库,(先手工创建数据库)

2,定义数据模型

3,同步数据库,执行CRUD操作 (配置根管理项目中的setting.py中的 DATABASES)

           ENGINE:数据库连接引擎(默认的'django.db.backends.sqlite3')把sqlite3改   为 mysql

            NAME:要连接的数据库的名称

           USER:连接数据库时的登录账号

         PASSWORD:连接数据库时的登录密码

注意:django默认情况下,封装的是mysqldb模块连接mysql数据库

但是:mysqldb不支持新版本mysql数据库以及新版本的python环境;一般情况下我们使用pymysql替代mysqldb完成和新版本python以及mysql数据库的交互!

需要导入模块来替代MySQLdb:

                 import  pymysql

                 pymsql.install_as_MySQLdb()

二,数据模型:

Django会自动管理我们创建好的数据模型——class类型

自动管理类型——数据模型——处理——继承Django内置的一个类型

django.db.models.Model_所有Django项目中数据模型的父类(我们创建好的数据模型继承父类后,Django会帮我们管理我们创建的模型)

自动管理类型中的属性——面向对象——使用Django内建函数创建属性

django.db.models.AutoField():创建一个自动增长的主键属性

django.db.models.CharField():创建了一个存储字符串的属性

django.db.models.IntegerField():创建了一个存储整数的属性

django.db.models.FloatField():创建一个存储浮点数的属性

django.db.models.TextField():创建爱你一个存储长文本的属性

django.db.models.DateTimeField():创建一个存储日期时间的属性

..

项目中的数据模型,只能定义在程序(子项目)中,不能定义在根管理项中!

三,生成SQL脚本,同步数据库!

创建好数据模型后,生成SQL脚本,同步数据库!

python mange.py makemigrations  生成SQL脚本

python manage.py migrate   同步数据库!

四,在测试命令行中,引入数据模型,对数据模型进行CRUD操作

1,进入Django测试命令行            python manage.py shell

2,引入包中的模块          from user import models  (user是创建好的子程序名称)

例如:

(1)添加数据:

user = models.User(username='老王', userpass='123', age=58, gender='男', email='wang@gebi.com', phone='13838

user.save()  #保存

(2)  修改数据:

         查询到对象~修改对象的数据,保存(先查询到要修改的对象之后):

>>> user.username=’老李’

>>> user.save()

(3)删除数据:

         查询到对象~删除指定的对象(先查询到要删除的对象)

>>> user.delete()

(4)查询数据:

          all()查询所有数据

         filter()查询指定条件的数据

         exclude()查询条件之外的数据

         order_by()排序查询

         values()查询字典形式的数据

(5) 排序:

          u_list = models.User.objects.order_by(‘id’) / order_by(‘-id’)

(6)一些其他操作: 

     # 得到字典数据

       u_dict = models.User.objects.all().values() / filter(..).values()

    # 查询结果中包含多少数据

      models.User.objects.all().count()

   # 得到查询结果中的第一条数据

     models.User.objects.all().first()

  # 得到查询结果中的最后一条数据

     models.User.objects.all().last()

  # 判断查询结果中是否有数据

   models.User.objects.all().exists()

  # 模糊查询

    u_list = models.User.objects.filter(username__contains=’老’)

 # 开始/末尾模糊查询

   u_list = models.User.objects.filter(username__startswith=’老’)

   u_list = models.User.objects.filter(username__endswith=’老’)

  # 范围查询

  u_list = models.User.objects.filter(pk__in=[1,2,3,4,5])

  # 比较查询

   u_list = models.User.objects.filter(age__lte=18)

   u_list = models.User.objects.filter(age__gt=18)

  并且条件:与条件查询(Q对象

  models.User.objects.filter(条件1, 条件2, ..条件n)

  models.User.objects.filter(Q(username=’老王’) & Q(userpass=’123’))

  或者条件:或条件查询

  models.User.objects.filter(Q(username=’老王’) | Q(username=’老李’))

  取反:非条件查询:exclude()/->~Q

  Django提供了一个对象:原始值对象:F对象

  django.db.models.F

models.User.objects.filter(join_time=F(‘update_time’))

五,对应关系(级联操作):

一对一:Husband,Wife 通过外键关联【唯一约束】

一对多:Teacher, Student  通过外键关联【外键定义在多的一方】

多对多:Classes, Student 通过第三张表关联

多个类型之间的查询操作:

一对多[Teacher/Student]

通过一方查询多方:teacher.student_set.all()

通过多方查询一方:student.teacher

一对一[Husband/Wife]

互相查询:

查询husband对应的wife是谁:husband.wife

查询wife对应的husband是谁:wife.husband

多对多[Classes/Student]

查询classes课程所有的学生:classes.student_set.all()

查询studetn学生正在学习的所有课程:student.classes_set.all()

上一篇下一篇

猜你喜欢

热点阅读