Django模型——MySQL 数据库初识
1.数据库的连接配置
1.1 安装 pymysql
#虚拟环境中安装
pip install pymysql
1.2 创建数据库用户
mysql.user
表中创建,需要有建库及以下权限。
1.3 建库
建立数据库
CREATE DATABASE db_name;
1.4 配置文件
1.4.1 配置settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
#数据库名称
'NAME': 'practise',
#用户名,不推荐root
'USER': 'root',
'PASSWORD': 'qwe123',
#数据库所在主机地址(一般是IP地址)
'HOST': '127.0.0.1',
#数据库应用接口,mysql 默认3306
'port': '3306'
}
}
TIME_ZONE = 'Asia/Shanghai'
1.4.2 配置__init__.py
#项目目录下的__init__.py文件
import pymysql
pymysql.install_as_MySQLdb()
2.django的ORM系统
2.1 ORM 定义
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
2.2 ORM 系统
- .ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
2.3 django 模型映射关系
- 模型类必须都写在app下的models.py文件中。
- 模型如果需要映射到数据库,所在的app必须被注册。
- 一个数据表对应一个模型类,表中的字段,对应模型中的类属性。
3.模型的创建与激活
3.1 创建模型
#app/models.py
class User(models.Model):
# 主键可以省略,django 自动加上
id = models.AutoField(primary_key=True, default=20150500)
name = models.CharField(max_length=30),
age = models.IntegerField(default=0),
gender = models.SmallIntegerField(default=0),
c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
3.2 激活模型
3.2.1 迁移
(djfirst) zdq@python:~/DjProjects/practise$ python manage.py makemigrations book
Migrations for 'book':
book/migrations/0001_initial.py
- Create model User
#book:app名称
- APP/migrations 目录下会生成 xxxx_initial.py 文件,即
migration
文件 - 告诉数据库我们要做的迁移,用models里面的model和当前的migrations代码里面的model做对比,如果有新的修改,就生成新的migrations代码
- 迁入缓冲区
3.2.2 查看中间文件
(djfirst) zdq@python:~/DjProjects/practise$ python manage.py sqlmigrate book 0001
BEGIN;
--
-- Create model User
--
CREATE TABLE `book_user` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `age` integer NOT NULL, `gender` smallint NOT NULL, `c_time` datetime(6) NOT NULL);
COMMIT;
#表名'app_name'加'+'加'模型名'
3.3 刷入数据库
(djfirst) zdq@python:~/DjProjects/practise$ python manage.py migrate book
Operations to perform:
Apply all migrations: book
Running migrations:
Applying book.0001_initial... OK
- migrate指令是用migrations目录中代码文件和django数据库djaong_migrations表中的代码文件做对比,如果表中没有,那就对这些没有的文件按顺序及依赖关系做migrate apply,然后再把代码文件名加进migrations表中。
4.数据库的增删改查
4.1 django shell 调式工具
python manage.py shel
4.2 数据库相关的接口(QuerySet API)
- 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
- QuerySet是可迭代对象.
- QuerySet支持切片, 不支持负索引.
- 可以用list强行将QuerySet变成列表.
4.3 修改数据
4.4 删除数据
4.5### 4.5 添加数据
1. save
# save 是模型实例的方法
In [26]: User(name='阿笠博士', gender=0, age=40).save()
In [27]: user = User(name='日暮警官',gender=0, age=40)
In [28]: user.save()
# 简单的查询语句,后面会讲到
In [29]: User.objects.filter(age=40)
Out[29]: <QuerySet [
<User: id<201506>name[阿笠博士]gender(女)age|40|c_time:2019-03-15 03:46:57.400190+00:00>, <User: id<201507>name[日暮警官]gender(女)age|40|c_time:2019-03-15 03:48:09.416383+00:00>
]>
#User.object 是User模型的管理器,可看作 model 和 mysql 的接口通道,后面会大量用到。
2. create
# create 是管理器方法,返回模型对象
In [30]: User.objects.create(name='基德', gender=1, age=22)
Out[30]: <User: id<201508>name[基德]gender(男)age|22|c_time:2019-03-15 03:53:35.491123+00:00>
In [33]: user = {'name':'纳鲁淘', 'gender':1, 'age':18}
In [34]: User.objects.create(**user)
Out[34]: <User: id<201509>name[纳鲁淘]gender(男)age|18|c_time:2019-03-15 03:56:49.747026+00:00>
# 查看结果
In [38]: User.objects.filter(name__in=('基德', '纳鲁淘'))
Out[38]: <QuerySet [
<User: id<201508>name[基德]gender(男)age|22|c_time:2019-03-15 03:53:35.491123+00:00>,
<User: id<201509>name[纳鲁淘]gender(男)age|18|c_time:2019-03-15 03:56:49.747026+00:00>
]>
4.6 查询数据
博主:来自异世界的django啊,请聆听我的呼唤,现身吧!
----------一阵凉风吹过,什么也没有发生------------
博主:库齐 吆塞 哝 究次
django:…
博主:请告诉我
MySQL
的模型查找方法吧django:官方文档
博主:看不懂啊!
django:mdzz
博主:…
django:禁书卷轴
博主:。。。