美文网首页我爱编程
Python web开发----->Django(数据模型处理

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

作者: 城北有梦 | 来源:发表于2018-04-14 21:00 被阅读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()

    相关文章

      网友评论

        本文标题:Python web开发----->Django(数据模型处理

        本文链接:https://www.haomeiwen.com/subject/oynlkftx.html