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)
数据表中字段和属性分析
- django字段可以分为几大类: 字符串、数字、时间、二进制、自增(primary_key=True)
- 字段属性分析
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
作用:
- adjango admin中显示下拉框,数据库中存入的是数字
- 避免连表查询
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')
网友评论