美文网首页
django ORM基本知识

django ORM基本知识

作者: 后来者2016 | 来源:发表于2017-12-14 13:39 被阅读0次

ORM分为两类:

  • DBfirst
    创建数据库 ----> 生成类 ----> 操作类
  • Codefirst
    先写类 ----> 命令生成数据表 ----> 操作类

连接mysql数据库

  • django默认数据库使用的是sqlitedb
  • 如果使用mysql,首先在本地环境安装mysql
  • 修改为mysqldb需要在project的settings.py中修改DATABASES信息
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}
  • django默认使用MySQLdb模块,如果主动修改为pymysql:
    在project目录下的 init 文件中添加
import pymysql
pymysql.install_as_MySQLdb()

创建数据表

在app的models.py中

# 自动创建id列,自增、主键
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
# 手动创建自增列uid。必须填写 primary_key=True
uid = models.AutoField(primary_key=True)
caption = models.CharField(max_length=32)

数据表中字段和属性分析

  1. django字段可以分为几大类: 字符串、数字、时间、二进制、自增(primary_key=True)
  2. 字段属性分析
null        db是否可以为空
default     默认值
primary_key 主键
db_column   列名
db_index    索引
unique      唯一索引
unique_for_date
unique_for_month
unique_for_year
  • 时间相关
auto_now       #更新数据表时自动生成
auto_now_add   #创建数据表是自动生成

e.g;
ctime = models.DateTimeField(auto_now_add=True)
uptime = models.DateTimeField(auto_now=True)
# 创建数据时,ctime和uptime两列会自动更新时间

uptime使用限制:
不适用情况:

obj = UserInfo.objects.filter(id=1).update(capiton = 'CEO')

适用情况:

obj = UserInfo.objects.filter(id=1).first()
obj.capiton = 'CEO'
obj.save()
  • choices
    作用:
  1. adjango admin中显示下拉框,数据库中存入的是数字
  2. 避免连表查询
user_type_choices = (
        (1, 'super'),
        (2, 'common'),
        (3, 'unkown')
    )
user_type_id = models.IntegerField(choices=user_type_choices,default=1)
  • adjango admin专属属性
blank   adjango admin        #是否为空
verbose_name adjango admin   #显示中文
editable  adjango admin      #是否可以编辑
error_messages               #错误信息
help_text                    #提示信息
  • form属性
validators        # django form 中 自定义错误参数

数据表的增删查改

  • 创建
- adjango admin专属
# 方式1
UserInfo.objects.create(
  username='root',
  password = '123'
    )
# 方式2
dic = {'username':'root', 'password':'123'}
UserInfo.objects.create(**dic)
# 方式3
obj = UserInfo(username = 'root1',password = '123')
obj.save()

方式3需要通过save()完成

  • 查询
# 查找所有
result = UserInfo.objects.all()
# 返回值为QuerySet类型  [obj1, obj2, obj3]
# 每个对象都有obj(id,username,password)
for row in result:
  print row.id,row.username,row.password
# 查找指定
result = UserInfo.objects.filter(username = 'root1')
# 查询条件可以添加多个 (username = 'root1',password = '123')
  • 删除
UserInfo.objects.filter(id=4).delete()
  • 更新
UserInfo.objects.all().update(password = '1234')

相关文章

网友评论

      本文标题:django ORM基本知识

      本文链接:https://www.haomeiwen.com/subject/qeckwxtx.html