ORM原理
对象关系映射 (Object Relational Mapping ,简称ORM )是一种为了解决面向对象 与关系数据库 存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象 和数据库之间映射的元数据 ,
Python配置MySql环境
1.下载:
pip install pymysql
pip install mysqlclient
2.创建Django项目,在主路由的setting文件中修改数据库设置:
DATABASES = {
'default': { 'ENGINE' : 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'NAME': '【数据库名称】',
'USER': '【MySQL账号】',
'PASSWORD': '【密码】',} }
填写配置的数据库名称,用户名和密码就完成了环境的配置
表与字段的常用字段约束
表与字段的定义
字段类型关键字 | 说明 |
---|---|
AutoField | 自动增长的整数(相当于:int auto_increment)说明:常用的参数:primary_key=True(定义主键)如果不写id=models.AutoField(primary_key=True),Django也会创建一个自增的主键id |
IntegerField | 整数int |
Decimal | 定点数 必填参数:max_digits:最大总位数 decimal_places:小数位数 |
CharField | 字符串 |
TextField | 大文本Text |
BooleanField | True |
DateTimeField | 日期 常用参数:auto_now:每次修改对象,自动设置时间 auto_now_add:第一次被创建,自动设置时间 |
EmailFiled | 邮箱 |
ImageField | 图片 |
常用的字段约束
关键字 | 说明 |
---|---|
primary_key | 是否是主键 默认值(Flase) |
null | 是否为空 默认值(Flase) |
unique | 是否重复 默认值(Flase) |
default | 默认值 默认值(Flase) |
blank | 在django管理后台新增或编辑一条表数据时,该字段能否为空 null是数据库范畴,blank是表单验证范畴默认值(Flase) |
代码:
from django.db import models
import datetime
# Create your models here.
class User(models.Model):
# id=models.AutoField(primary_key=True) # 可以省略
username=models.CharField(max_length=16,unique=False)
passworld=models.CharField(max_length=16,unique=False)
gender=models.PositiveSmallIntegerField(default=0)
age=models.IntegerField(null=True)
createDatetime=models.DateTimeField(auto_now_add=datetime.datetime.now())
数据库的迁移与维护
在PyCharm的终端中执行:
生成迁移文件:
python manage.py makemigrations
执行迁移文件:
python manage.py migrate
模型类的增删改
在终端中输入相应的命令:
D:\Python练习\ORM框架\模型类实现>python manage.py shell
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from user.models import *
In [2]: user =User()
In [3]: user.username='username1'
In [4]: user.id
In [5]: user.save()
In [6]: user.id
Out[6]: 1
In [7]: user.passworld='passworld'
In [8]: user.save()
In [9]: user.delete()
Out[9]: (1, {'user.User': 1})
In [10]: user =User.objects.create()
In [11]: user.delete()
Out[11]: (1, {'user.User': 1})
In [12]: user=User.objects.create(username='名字1')
In [13]: User.objects.filter(id=3).update(passworld='passworld1')
Out[13]: 1
In [15]: User.objects.filter(id=3).delete()
Out[15]: (1, {'user.User': 1})
In [16]: exit
模型类的查询方法
方法 | 说明 |
---|---|
all | 返回所有 |
get(条件) | 返回满足条件的数据(对象) |
filter(条件) | 返回满足条件的数据(列表) |
exclude(条件) | 返回不满足条件的数据(列表) |
代码:
user=User.objects.get(id=1) #get方法
user_1=User.objects.all() #all方法
user_2=User.objects.filter(id=1) #filter方法
user_3=User.objects.exclude(id=1) #exclude方法
比较查询
方法 | 说明 |
---|---|
相等 | exact |
大于 | gt |
大于等于 | gte |
小于 | lt |
小于等于 | lte |
查询为空 | isnull |
代码:
user=User.objects.filter(iddelete__exact=0) #等于
user_2=User.objects.filter(money__gte=1000) #大于等于
user_3=User.objects.filter(money__gt=1000) #大于
user_4=User.objects.filter(money__lt=1000) #小于
user_5=User.objects.filter(money__lte=1000) #小于等于
user_6=User.objects.filter(birthday__isnull=True)
模糊查询
方法 | 说明 |
---|---|
包含 | contains |
开头 | startswith |
结尾 | endwith |
代码:
user=User.objects.filter(username__contains='1') #包含
user_1=User.objects.filter(username__startwith='name1') #以什么开头
user_2=User.objects.filter(username__endwith='@qq.com') #以什么结尾
范围查询
方法 | 说明 |
---|---|
in | 范围 |
例子:
user=User.objects.filter(username__in('name1','name2'))
F对象和Q对象
F对象:同一行比较
例子:
from django.db.models import F
# 同行数据字段互相比较
# 查询在第一次创建后,发生修改的对象
user=User.objects.filter(updateTime__gt=F('createTime'))
Q对象:逻辑比较
例子:
from django.db.models import Q
#查询余额大于5000的男性
user_1=User.objects.filter(Q(money__gt=5000) & Q(gender__exact=0))
#查询余额大于5000的男性或者余额大于2000的女性
user_2=User.objects.filter(Q(money__gt=5000,gender__exact=0) | Q(money__gt=2000,gender__exact=1))
懒加载和链式调用
懒加载:
当使用到模型类的数据时,才向数据库加载数据的具体内容
懒加载的好处:节省内存
链式调用:
user_all=User.objects.all().order_by('createTime','-birthday')
来源:CSDN
作者:凉拌豆腐干
链接:https://blog.csdn.net/taochaocaj/article/details/103974559