Django-模型
一: 概述
- 使用orm不能创建库
- 每一个model都是一个Python的类,且该类都是 django.db.models.Model的子类
- 类的属性就是表的字段
- 类对应数据库表
- 类属性对应数据库表字段
- 实例化对象对应数据库一条记录
- 当不指定id时,django会再生成的表中添加一个id字段
- 表名如果不指定,会使用 app名称_模型类名小写 做为数据库表名字
使用ORM操作数据库的流程
创建数据库
因为ORM本身没有创建数据库的功能,所以需要我们手动去创建一个数据库,例如 create database mysite;
Django的setting配置中配置数据库连接地址
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306,
'NAME': "mysite",
'USER': 'root',
'PASSWORD': '',
'OPTIONS': {'charset':'utf8mb4'},
}
}
配置Django使用pymysql
在项目的__init__.py文件中加入如下两行
# 导入pymysql模块 import pymysql # 告诉Django使用pymysql pymysql.install_as_MySQLdb()
在app下的model.py文件中定义类(集成models.Model)
class Userinfo(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32,null=False)
数据库迁移
python3 manage.py makemigrations
python3 manage.py migrate
Pycharm连接MySQL


填写数据库连接信息即可2.1
二 orm 13种常用一般api
2.1 在普通python文件里怎么加载django配置
import os
if __name__ == '__main__':
# 加载Django项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bmsdemo1.settings")
# 导入Django,并启动Django项目
import django
django.setup()
from bms import models
2.2 all
# all
ret = models.Person.objects.all()
print(ret)
2.3 get
# get如果查询条件不存在,就报错,不建议使用
# 结果是一个具体的对象
# 几乎不用
ret1 = models.Person.objects.get(id=2)
print(ret1)
2.4 filter
# filter
# QuerySet对象 继承了一个list,所有list的特性
# 如果结果不存在,则返回一个空的querySet,不会报错
# 根据索引去单个数据
ret2 = models.Person.objects.filter(id=2)
print(ret2)
# 从QuerySet种一个具体的对象
ret3 = models.Person.objects.filter(id=2)[0]
print(ret3)
2.5 exclude
# exclude
# 排除条件
# 返回QuerySet
ret4 = models.Person.objects.exclude(id=2)
print(ret4)
2.6 values
# values
# 具体去某些字段
# 返回指定字段的querySet,默认查询所有字段
ret = models.Person.objects.values('name','birthday')
print(ret)
2.7 values_list
# values_list
# 返回由值组成的元祖(querySet)
ret = models.Person.objects.values_list('name','birthday')
print(ret)
2.8 order_by
# order_by
# 按照字段排序
ret = models.Person.objects.order_by('birthday')
print(ret)
ret = models.Person.objects.order_by('age')
print(ret)
2.9 reverse
# reverse
# 对一个有序querySet进行反转(只能对有序的querySet进行反转,这个要注意)
ret = models.Person.objects.all().order_by('age').reverse()
print(ret)
2.10 distinct
2.11 count
# count 取querySet数量
ret = models.Person.objects.all().count()
print(ret)
2.12 first
# first 返回querySet中第一个对象
ret = models.Person.objects.all().first()
print(ret)
2.13 last
# last 返回querySet中最后一个对象
ret = models.Person.objects.last()
print(ret)
2.14 exist
# exist
# 判断是否有数据
ret = models.Person.objects.filter(id=1).exists()
print(ret)

浙公网安备 33010602011771号