zoukankan      html  css  js  c++  java
  • django之mysql数据库的配置和orm交互

    一:django默认数据库的配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',  
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    二:自定义数据库的配置

      1. 安装mysql驱动  install PyMySQL

      2. setting.py中修改 DATABASES中的配置。

    # ———————————————————mysql数据库的设置———————————————————
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': "django_study_test", # 迁移是生成数据库的名称
            'HOST':"127.0.0.1",
            'PORT':3306,
            'USER':"xx",
            'PASSWORD':"xx",
        }
    }
    # ———————————————————mysql数据库的设置———————————————————

      3.工程目录下的__init__.py中设置。

    from pymysql import install_as_MySQLdb
    
    install_as_MySQLdb()



    作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。

       4. 在应用中的model.py中定义模型类

    from django.db import models
    
    # Create your models here.
    
    
    class Country(models.Model):
       # 没有定义主键,迁移生成建表语句是,会自动增加id这个字段。
        country_name = models.CharField(max_length=20,verbose_name="国家名称")
        build_time = models.DateField(verbose_name="创建时间")
        country_flower = models.CharField(max_length=20,verbose_name="国花")
        province_number = models.IntegerField(verbose_name="行政区的数量")
        is_unite_member = models.BooleanField(default=False,verbose_name="联合国五常")
    
        class META:  # 正确的写法是 class Meta,就相当于没有找到这个抽象的类,所以使用了默认的表名
            db_table = "tb_country"  # 设置这个值,不起作用,表的名字还是默认的user_country app的小写_模型类的名字小写为表的名字。
    
        def __str__(self):
            return self.country_name
    
    
    class Province(models.Model):
    
        province_name = models.CharField(max_length=20,verbose_name="行政区的名字")
        nick_name = models.CharField(max_length=20,verbose_name="别称")
        famous_school = models.CharField(max_length=20,verbose_name="高等院校")
        count_985211 = models.IntegerField(verbose_name="985/211的数量")
        belong = models.ForeignKey("Country",on_delete=models.CASCADE,verbose_name="所属国家") 
       # 迁移建表时候,会自动关联 country的主键。
        class META:
            db_table = "tb_province"
    
        def __str__(self):
            return self.province_name

       5.  shell 中输入迁移指令

    python manage.py makemigrations
    python manage.py migrate


    生成了一大堆其他的表,作用是什么?

       6. 查看数据库中表的情况

    数据库

       7.插入数据

    文件插入数据
                                                                                                              
    修改后的建表语句                                                                                                                     

    insert into user_country values (1,"中国","1949-10-01","牡丹",32,1),(2,"日本","1949-12-23","樱花",32,1),(3,"韩国","1949-10-01","木槿花",32,1);

    insert into user_province values (1,"北京","京城","清华大学",20,1),(2,"上海","魔都","复旦大学",20,1),(3,"广州","粤城","华南理工大学",20,1),(4,"东京","首都","东京大学",20,2),(5,"首尔","泡菜","首尔大学",20,3);

      

      注意:使用的django中的shell工具记性orm的测试

      8.增

    方法一:
    
    
    
    方法二:


    
    

       9.查

    查询所有

    类名.objects.all()
    一对多查询
    多对一查询

       条件查询

      filter 过滤多个结果

      get  过滤单一结果

      exlcude 排除掉符合条件后剩下的结果

      属性名称__比较运算符=值

      条件查询之模糊查询

    包含查询 contains  包含

    结尾开头查询 startswith endswith

    空查询 isnull
    范围查询 in=[] in=() 指的是在括号里面出现的范围,不是betwwen的意思。不是从32到100的意思,而是32或100的意思。

    比较查询
    gt 大于 gte 大于等于 lt 小于 lte 小于等于
    不等于 需要使用 exclude过滤器
    时间查询  from datetime import date
    
    

      F对象

      用于属性值,用于两个属性之间的数值比较:由于没有其他的int类型字段了,因此从别人的例子中贴图

    # 不同属性之间进行比较

      Q 对象

      多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。

    # 表示逻辑



      聚合函数

      Avg Count Max Min Sum 

    # 总数

    aggregate进行连接


    Count不用 aggregate进行连接


    Avg 平均


    Max

      排序

    # 升序
    
    # 降序


     关联查询

    # 一到多的查询


    # 多到一的查询

      关联过滤查询

    # 一对多的关联查询

    #
    过滤 多的一方的类名小写__多的一方的字段名+条件




    # 多对一的关联查询
    多的一方的外键__一的一方的字段名+条件



      10 改

    # 修改字段值

    方法一: obj.字段名 = 新值 obj.save()





    方法二: 模型类.objects.filter(字段原值).update(要改的值) 返回受影响的行数




       批量修改

    # 批量修改
    # 修改前

    # 修改中

    # 修改后

      11.删除

    # 删除的两种方式


      

  • 相关阅读:
    图片延迟加载
    Python开发【第一篇】:初识Python
    JavsScript+dom
    Django学习系列18:使用迁移创建生产数据库
    Django学习系列17:在模板中渲染待办事项
    Django学习系列16:处理完POST请求后重定向
    Django学习系列15:把POST请求中的数据存入数据库
    Django学习系列14:第一个数据库迁移
    Django学习系列13:Django ORM和第一个模型
    Django学习系列12:把Python变量传入模板中渲染
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11769881.html
Copyright © 2011-2022 走看看