博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六、Django模型基础第一节
阅读量:7240 次
发布时间:2019-06-29

本文共 3955 字,大约阅读时间需要 13 分钟。

1 数据库的连接配置

django 连接mysql的配置流程:

  1. 安装 pymysql pip install pymysql

  2. 创建数据库用户

1 create user 'xiangnan'@'%' identified by '123456';2 grant all on *.* to 'xiangnan'@'%';3 flush privileges;
  1. 创建数据库

1 CREATE DATABASE IF NOT EXISTS crm;
  1. 在settings.py中修改配置

1 DATABASES = { 2       'default': { 3           'ENGINE': 'django.db.backends.mysql', 4           'NAME': 'crm',  # 数据库名 5           'USER': 'xiangnan', 6           'PASSWORD': '123456', 7           'HOST': '127.0.0.1', 8           'PORT': '3306', 9       }10 }
  1. 修改项目文件夹(和settings.py文件所在的目录)下 __init__.py文件 写上:

1 import pymysql2 3 pymysql.install_as_MySQLdb()

  6. 设置时区 TIME_ZONE = 'Asia/ShangHai' # 北京时间

2 Django的ORM系统

-对象关系映射(Object Relational Mapping,简称ORM)!

-简单的说就是用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句就能对数据库进行增删改查。

 

3 模型的创建与激活

3.1 Django模型映射关系

 

  1. 模型类必须都写在app下的models.py文件中。

  2. 模型如果需要映射到数据库,所在的app必须已注册.

  3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

3.2 创建模型

每一个模型都是django.db.models.Model的子类

1 from django.db import models 2  3 # Create your models here. 4 class Student(models.Model): 5     name = models.CharField(max_length=20) 6     age = models.SmallIntegerField(default=0) 7     sex = models.SmallIntegerField(default=1) 8     qq = models.CharField(max_length=20, default='') 9     phone = models.CharField(max_length=20, default='')10     c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)11 12     def __str__(self):13         return 'id=%s,name=%s,age=%s,c_time-%s' % (self.age, self.name, self.age, self.c_time)

3.3 激活模型

  1. 在项目中注册app

  2. 运行数据库迁移命令(一定要在项目根目录下) 执行以上命令创建映射文件,告诉django,我们要做哪些数据库的更改

    python mange.py makemigrations teacher

    命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写则所有的app都执行.

    迁移 sqlmigrate 从迁移获取sql语句

1 -- Create model Student 2  3 CREATE TABLE teacher_student ( 4     id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,  5     name varchar(20) NOT NULL,  6     age smallint NOT NULL,  7     sex smallint NOT NULL,  8     qq varchar(20) NOT NULL,  9     phone varchar(20) NOT NULL, 10     c_time datetime(6) NOT NULL);11 COMMIT;

  3. 运行migrate命令,使迁移生效

    python manage.py migrate

    执行以上命令,将映射文件中的映射数据提交到数据库中

    打开数据库我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.

1 mysql> desc teacher_student; 2 +--------+-------------+------+-----+---------+----------------+ 3 | Field  | Type        | Null | Key | Default | Extra          | 4 +--------+-------------+------+-----+---------+----------------+ 5 | id     | int(11)     | NO   | PRI | NULL    | auto_increment | 6 | name   | varchar(20) | NO   |     | NULL    |                | 7 | age    | smallint(6) | NO   |     | NULL    |                | 8 | sex    | smallint(6) | NO   |     | NULL    |                | 9 | qq     | varchar(20) | NO   |     | NULL    |                |10 | phone  | varchar(20) | NO   |     | NULL    |                |11 | c_time | datetime(6) | NO   |     | NULL    |                |12 +--------+-------------+------+-----+---------+----------------+13 7 rows in set (0.00 sec)

注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.

4 数据的增删改查

  • 工具 djang shell 调试工具

    python manage.py shell

1 # 增-1 2 laoda = Student(name='laoda', age=18) 3 laoda.save() 4 # 增-2 5 laoer = Student() 6 laoer.name = 'laoer' 7 laoer.age = 17 8 laoer.save() 9 # 增-310 Student.objects.create(name='laosan', age=16)11 # 增-412 Student.objects.get_or_create(name='laosi', age=15)
1 # 查询所有记录对象2 rs = Student.objects.all()3 # 查询一个记录对象4 rs = Student.objects.get(id=1)5 # 获取满足条件的对象6 rs = Student.objects.filter(sex=1)

all()和filter()方法返回的是QuerySet对象

get()方式返回的是单个对象,如果符合条件的对象有多个,则get报错

1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.

2.QuerySet是可迭代对象.

3.QuerySet支持切片, 不支持负索引.

4.可以用list强行将QuerySet变成列表.

1 # 改-12 rs = Student.objects.get(name='laoda')3 rs.name = 'xiaoming'4 rs.save()5 # 改-26 Student.objects.filter(name='xiaoming').update(sex=0)7 # 改-38 Student.objects.all().update(sex=1)
1 Student.objects.get(id=1).delete()2 Student.objects.filter(sex=0).delete()3 Student.objects.all().delete()

5 总结

转载于:https://www.cnblogs.com/weixiansheng/p/10715912.html

你可能感兴趣的文章
android生成apk包出现Unable to add "XXX" Zip add failed问题
查看>>
SSH服务器与Android通信(1)--服务器端发送数据
查看>>
C++Bulder DataSnap 内存泄露元凶
查看>>
二叉搜索树与双向链表
查看>>
Cassandra查询语言CQL的基本使用
查看>>
echo输出到stderr
查看>>
Leetcode: Search a 2D Matrix II
查看>>
Unicode与 utf8的互相转换
查看>>
Android开发周报:Flyme OS开源、经典开源项目解析
查看>>
uva 568(数学)
查看>>
【Hibernate】Hibernate系列4之配置文件详解
查看>>
centos7+redis+php环境配置
查看>>
割点、桥模板以及点双连通、边双连通
查看>>
Yii数据库操作增删改查-[增加\查询\更新\删除 AR模式]
查看>>
vs发布的程序不依赖运行时库msvcp100.dll
查看>>
jsp简单实现统计在线人数
查看>>
df、du、fdisk:Linux磁盘管理
查看>>
C#时间戳转换[转发]
查看>>
MySQL · 答疑解惑 · MySQL 锁问题最佳实践
查看>>
SDK的制作详解
查看>>