一: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.删除
# 删除的两种方式