使用pycharm开发Django2.2全过程(四)--数据库及模型层

当涉及大数据存储及读取时,我们会使用数据库。在django里面,常用及默认的数据库是sqlite,也可在配置中更改为其他数据库。
通常,为了使用数据库,需要建立Model模型,每个Model模型对应数据库中唯一的一张表,模型的每个属性都表示为数据库中的一个字段,这个不随数据库的变更而改变(表结构一致,只需要修改API),从而减少了修改工作。

目录

1.安装数据库

(1)在电脑上安装数据库

mysql:
(要记住你设置的用户名及密码)
网址:下载
使用pycharm开发Django2.2全过程(四)--数据库及模型层
使用pycharm开发Django2.2全过程(四)--数据库及模型层
下载完成后开始安装:

(2)在当前python环境中安装 pymysql

pip install pymysql

2.连接数据库(sqlite)

(pycharm是专业版才可,学习中电脑mysql账号密码都对但是pycharm连接不上,网上找了很多资料暂未找到原因,为了接下来的学习,转用sqlite继续学习)

新建数据库
使用pycharm开发Django2.2全过程(四)--数据库及模型层
双击数据库,则出现右侧数据库,这里也可直接在此连接
使用pycharm开发Django2.2全过程(四)--数据库及模型层
如果你的数据库无法显示结构,可能是没有连接或缺失插件。在下图2的位置一般可弹出提示,点击安装即可,然后点击3测试成功后,刷新数据库即可。
使用pycharm开发Django2.2全过程(四)--数据库及模型层

3.数据库配置

常用有:

django.db.backends.postgresql

django.db.backends.mysql

django.db.backends.sqlite3

django.db.backends.oracle

按步骤2操作后,可以看到在setting文件中已更改:
使用pycharm开发Django2.2全过程(四)--数据库及模型层
mysql为如下格式:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mytest1',#数据库的名
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
        }
}

4.创建模型

找到应用程序目录下的Models文件,我们在此文件中定义表结构。
使用pycharm开发Django2.2全过程(四)--数据库及模型层
常用字段:

字段 说明
AutoField 自动创建一个自增的 列 ,如果要显式的自定义一个自增列,必须设置primary_key=True。 要注意.一个model类不能有两个自增的AutoField
CharField 字符串字段 ,必须设置max_length参数 ,如果超过254个字符,建议使用TextField
BooleanField 布尔类型,不可为空(NullBooleanField为允许未空的布尔类型)
DateField 日期类型 (date),自动设置该字段为现在日期用DateField.auto_now,第一次被创建时自动设置该字段为现在日期用DateField.auto_now_add
DateTimeField 日期(datetime ),同DateField的参数
FloatField 浮点数
IntegerField 整型
EmailField 带有检查 Email 合法性的 CharField
TextField 大文本。默认对应的form标签是textarea

除上面的表格内容,还有很多字段,可自行按需搜索

5.数据库迁移

通过迁移命令执行迁移后,会根据model.py文件定义的类字段生成对应的sql语句脚本,进行相应的数据库操作。
代码如下:

# 生成迁移文件 全部迁移不写模块名
python manage.py makemigrations [模块名] 
#执行迁移 全部迁移不写模块名
python manage.py migrate [模块名] 


使用pycharm开发Django2.2全过程(四)--数据库及模型层
此时刷新数据库:
使用pycharm开发Django2.2全过程(四)--数据库及模型层

6.操作模型控制数据库的增删改查

导入模型:

from myapp.models import PeopleInfo

查:

【模型类名】.objects.【方法】(【条件】)

常见方法有如下:

方法 说明
get() 返回满足条件的单条数据(多条或者0条会报错)
count() 返回查询集中的数据个数
first() 取第一个值
last() 取最后一个值
exists() 判断是否存在
all() 返回所有数据
filter(条件) 返回符合条件的数据
exclude(条件) 返回不符合条件的数据
values() 返回字典列表
order_by() 排序查询. 默认为升序排列,降序可在字段前加一个负号

例如: PeopleInfo.objects.get(name=‘yy’)为返回name为yy的对象

常用条件:

条件 说明
exact 相等
gt 大于
gte 大于等于
lt 小于
lte 小于等于
isnull 为空查询
contains 包含
startswith 以什么开头
endswith 以什么结尾
in 在什么范围

例如:PeopleInfo.objects.get(name__exact=“yy”)为返回name为yy的对象
例如:PeopleInfo.objects.get(name__endswith=‘t’)
例如:PeopleInfo.objects.filter(name__in= [“name1”,“name2”]

增:

#第一种方式
user=PeopleInfo.objects.create(name='uu',age=11,sex=1,)
user.save()
#第二种方式
user2=PeopleInfo(name='yy',age=23,sex=0)
user2.save()

删:

# 第一种方式
user = PeopleInfo.objects.create(name='uu', age=11, sex=1, )
user.delete()
# 第二种方式
PeopleInfo.objects.filter(id=2).delete()

改:

# 第一种方式
user = PeopleInfo.objects.create(name='uu', age=11, sex=1, )
user.age=3
user.save()

# 第二种方式
PeopleInfo.objects.filter(id=2).update(age=2)

7.其他查询方式

F对象:
常用于同行数据字段间的互相比较
例如:

from django.db.models import F

PeopleInfo.objects.filter(name=F('age'))

Q对象:
常用于字段间的逻辑比较

from django.db.models import Q

PeopleInfo.objects.filter(id=6).filter(age=10) 
PeopleInfo.objects.filter(Q(id=6)|Q(age=10)) 
PeopleInfo.objects.filter(~Q(id=6)) 
上一篇:02-Objects 和 MoreObjects


下一篇:Swfit 里 Array(五)和 NSArray 转换