django ORM基本知识

2017-12-14  本文已影响0人  后来者2016

ORM分为两类:

连接mysql数据库

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}
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()
  1. adjango admin中显示下拉框,数据库中存入的是数字
  2. 避免连表查询
user_type_choices = (
        (1, 'super'),
        (2, 'common'),
        (3, 'unkown')
    )
user_type_id = models.IntegerField(choices=user_type_choices,default=1)
blank   adjango admin        #是否为空
verbose_name adjango admin   #显示中文
editable  adjango admin      #是否可以编辑
error_messages               #错误信息
help_text                    #提示信息
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')
上一篇 下一篇

猜你喜欢

热点阅读