DjangoORM框架(一)

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
BooleanFieldTrue
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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值