django框架与MySQL数据库的交互_django之mysql数据库的配置和orm交互

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 06:34   89   0

一: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 importinstall_as_MySQLdb

install_as_MySQLdb()

19e51c834570d660919446f78b0dab92.png

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

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

from django.db importmodels#Create your models here.

classCountry(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="联合国五常")classMETA: # 正确的写法是 class Meta,就相当于没有找到这个抽象的类,所以使用了默认的表名。

db_table= "tb_country" # 设置这个值,不起作用,表的名字还是默认的user_country app的小写_模型类的名字小写为表的名字。

def __str__(self):returnself.country_nameclassProvince(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的主键。classMETA:

db_table= "tb_province"

def __str__(self):return self.province_name

5. shell 中输入迁移指令

python manage.py makemigrations

python manage.py migrate

bf3d32cea34ad5eba951549415195c33.png

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

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

数据库

b7afade8349642bded41cb30740e3bc2.png

7.插入数据

文件插入数据

5796390abba805afc392b1fa0a7e5bf3.png

8e79ee813254c750cf3bcb1f4ea4d4bc.png

修改后的建表语句

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的测试

b1482121f3811ed9733a1819210ef530.png

8.增

方法一:

9fc6d66788bfdd47047b321d6ac05bdc.png

c4d0b5711cb93b635428b69972db6013.png

方法二:

79943188bfdf3f1ed5d8e76ae399781b.png

3cf4e44aba8fbed8b707ebeb9a5c64ad.png

9.查

查询所有

类名.objects.all()

8b1c13fedd6577045d1ce585ddc77250.png

一对多查询

cfe707c13dca1523fe138728551c82ed.png

多对一查询

1b8264bac7973633db32a742ba75c104.png

条件查询

filter 过滤多个结果

get 过滤单一结果

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

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

条件查询之模糊查询

包含查询 contains 包含

48c3b0fa4b9d796cafd1d417eaa8d571.png

结尾开头查询 startswith endswith

9dfe51a4d53cfba10c7b08d4c8e1b71b.png

空查询 isnull

fdfad57a287b83c4d180543ce9f75160.png

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

47369ab7903a776e9049125b16da6e68.png

比较查询

gt 大于 gte 大于等于 lt 小于 lte 小于等于

165e7f2c9fe4a969a7f5a1f847b34aa6.png

不等于 需要使用 exclude过滤器

ba00d31b53da2f5ae1cbf6a048048a89.png

时间查询 from datetime import date

6935569dbe4f4ad517703fd8bf03c39a.png

F对象

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

#不同属性之间进行比较

24152159476326dedad21056e4e67dea.png

Q 对象

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

#表示逻辑

5c4546549b6e35ae60b48fe2f7d71604.png

83c4d82f4b7324eb50aa25f011910fd2.png

聚合函数

Avg Count Max Min Sum

#总数

aggregate进行连接

868dd2ee8a8e13ca29929d8d48d0be80.png

Count不用 aggregate进行连接

2cc0dc10c651caa3bea844f1ef1021f4.png

Avg 平均

07710b47515e1214d2844dd9c959f4e0.png

Max

1d39479dfd28fa3002377f2b701715f9.png

排序

#升序

8af2f20a9c2a4aae4ea2a0e712a3b5ea.png

#降序

745f15be17fde1c4b6292a72319fe845.png

关联查询

#一到多的查询

3514968a39bbe4ed2853ea70d95835c0.png

# 多到一的查询

c294e8355ac279d09fc2c4ef4bbbb0b0.png

关联过滤查询

# 一对多的关联查询

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

20c3c50d3f38265140fe0792f2e9801d.png

4f9e7a207d42cd0e235282bc82e63942.png

# 多对一的关联查询

多的一方的外键__一的一方的字段名+条件

2cecd71eefc5dac3235a53238c56201e.png

136550e43d3916be397d335709b2a08c.png

10 改

#修改字段值

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

51c408a85eb0d14de0b44e1b34220b07.png

72aa8f1995397127b1d18fb1c6777f4d.png

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

268b92a976f229b56858acc9bfbd7efc.png

cacb90f2e3bca61e8817f99c4d69fc35.png

批量修改

#批量修改

# 修改前

6807f7c5f64dd60508c40d59aa21f6bb.png

# 修改中

fd179a26162f331f46646e247906a0df.png

# 修改后

31c3216dbd1717ad1954f87b6c79d136.png

11.删除

#删除的两种方式

8b55451ea01da62a396ec78543930613.png

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP