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.删除

    # 删除的两种方式


      

  • 相关阅读:
    Postman使用教程
    CAD和ArcGIS转换 矢量配准
    SAP CRM Advanced search和Simple search里Max hit表现行为的差异
    SAP CRM Product simple search的启用步骤
    如何快速定位SAP CRM订单应用(Order Application)错误消息抛出的准确位置
    如何动态修改SAP CRM WebClient UI表格栏的宽度
    如何在SAP CRM WebClient UI里创建web service并使用ABAP消费
    如何处理SAP CRM Web Service错误
    如何使用SAP CRM WebClient UI实现一个类似新浪微博的字数统计器
    如何开启SAP CRM基于WORD模板创建附件的功能
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11769881.html
Copyright © 2011-2022 走看看