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

# 删除的两种方式


 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2019-10-31 10:40  张京墨  阅读(505)  评论(0编辑  收藏  举报