django模型系统(一)

本文介绍 Django 框架下 ORM 的基本概念、数据库配置步骤、模型创建及映射过程,并演示如何通过 Python 代码实现数据的增删改查等基本操作。

django模型系统(一)

djangode ORM

ORM:对像关系映射
用python概念去表达数据库

数据库配置(mysql)

  • 安装pumysql
  • 修改项目目录下的__init__.py
import pymysql
pymysql.install_as_MySQLdb()
  • 手动创建一个当前项目的空数据库,准备一个有创建数据库权限的用户
    (推荐使用Navicat,方便;也可用命令行)
  • 在settings配置
    • 找到databases
    • 配置修改为:
    DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'crm',#数据库名
          'USER':'admin',#用户名
          'PASSWORD':'Root110qwe',#密码
          'HOST':'127.0.0.1',#主机地址
          'PORT':'3306'#端口地址
      }

补充Navicat的数据库连接

  • 注意:如果虚拟机上的,虚拟机记得写好端口映射
    1488523-20190403130533621-1580938731.png

模型的创建与映射

创建

模型就是django.db.modles.Model的一个子类。

  • 关系
    1488523-20190403131008517-1242306093.png

模型定义在app文件夹下的models.py文件
例如:
1488523-20190403132900719-67021308.png

映射

即:激活模型

  • 注册应用app
  • 创建迁移,每一个迁移文件都会有一个迁移编号
    • 每次修改模型都要重新创建
    python manage.py makemigrations appname#不写name就代表迁移所有的注册了的app
    例如:
    1488523-20190403133744162-731501331.png
    注意:此时数据库无表,此命令仅仅只是告诉Djano,修改了模型,不会操作数据库

如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看执行什么sql语句

使用命令:
  python manage.py sqlmigrate appname filenum

例如:
(crm) pyvip@Vip:~/project/crm$ python manage.py  sqlmigrate teacher 0001
  • 执行迁移:操作数据库,将对模型的改动应用到数据库(底层就是执行了sql)
  • 命令:
python manage.py migrate appname
  • 模型映射到数据库中是一张表 ,表名 = appname_模型name(小写)
    • 例如上面的student表:teacher_student
  • 执行命令的动作:
    • 在app中查找迁移文件,并且去django_migrations(系统自建的一张表)表中查找,如果有没有执行的迁移文件,就去执行它
    • 执行了迁移生成的sql语句
    • 如果成功,会在django_migrations表中增加一条记录
      • django_migrations表中有记录的信息,系统将不会执行记录中的文件的迁移

简单的数据的增删查改

django调试环境

进入命令(虚拟机的):
python manage.py shell

# 第一种方式
In [3]: s = Student()                                                                                  

In [5]: s.name = '心蓝'                                                                                

In [6]: s.age = 18                                                                                     

In [7]: Student.objects.all()                                                                          
Out[7]: <QuerySet []>

In [8]: s.save()  # save之后才会写到数据库

# 第二种方式
stu = Student.objects.create(name='敬子明', age=10)  # 直接创建

In [12]: stu.delete()                                                                                  
Out[12]: (1, {'teacher.Student': 1})
# 删除多条

In [12]: Student.objects.filter(sex=1).delete()                                                        
Out[12]: (1, {'teacher.Student': 1})

# 改一条
In [16]: s.age = 16                                                                                    

In [17]: s.save()  

# 改多条
In [10]: Student.objects.all().update(sex=0)                                                           
Out[10]: 2

# 查所有
In [2]: Student.objects.all()                                                                          
Out[2]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>
# 查一条
In [3]: Student.objects.get(pk=1)                                                                    
Out[3]: <Student: 心蓝>
# get 返回的是对象 如果返回了多值就会报错
# 带条件
In [8]: res = Student.objects.filter(sex=1)  # where sex=1                                                           
In [9]: res                                                                                            
Out[9]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>

转载于:https://www.cnblogs.com/pygive/p/10648681.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值