Django模型--数据库(MySQL)-初识

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)

  1. 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
  2. QuerySet是可迭代对象.
  3. QuerySet支持切片, 不支持负索引.
  4. 可以用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:禁书卷轴

博主:。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值