1.数据库的连接配置 django 连接mysql的配置流程:

  • 安装 pymysql pip install pymysql

  • 创建数据库用户 有创建数据库权限的用户

  • 创建数据库 crm

  • 修改配置 settins

  • 修改项目文件夹(和settings.py文件所在的目录)下 init.py 文件 写上:

    import pymysql pymysql.install_as_MySQLdb()

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

2.django的ORM系统 -对象关系映射(Object Relational Mapping,简称ORM)! 简单的说就是用面向对象的方式,描述数据库,操作数据库, 达到不用编写SQL语句就能对数据库进行增删改查。

3.模型的创建与激活

创建模型 Student的模型,代表学生

总结: 1. 每一个模型都是django.db.models.Model的子类

2. 类变量 表示模型中的数据库字段

3. 每一个字段有一个字段类的实例表示如Charfield,DateTimeField

激活模型 1.在项目中注册app

2.运行数据库迁移命令(一定要在项目根目录下)

python mange.py makemigrations teacher 告诉django,我们做了哪些数据库的更改 迁移

    sqlmigrate 从迁移获取sql语句

--

-- Create model Student

CREATE TABLE teacher_student ( id integer AUTO_INCREMENT NOT NULL PRIMARY KEY, #自动创建主键 name varchar(20) NOT NULL, age smallint NOT NULL, sex smallint NOT NULL, qq varchar(20) NOT NULL, phone varchar(20) NOT NULL, c_time datetime(6) NOT NULL); COMMIT;

3.运行migrate命令,

使迁移生效 python manage.py migrate

表名是appname_模型name.lower

4.数据的增删改查 -工具 djang shell 调试工具 python manage.py shell

django模型映射关系:

实例就是对应数据表中的一条数据.

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

  2. 模型如果需要映射到数据库,所在的app必须被安装.

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

数据库的配置:

安装pymysql :pip install pymysql

1.在settings.py中配置DATABASES

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql', # 数据库引擎

'NAME': 'mydb', #数据库名称

'USER': 'admin', # 链接数据库的用户名

'PASSWORD': 'Root110qwe', # 链接数据库的密码

'HOST': '127.0.0.1', # mysql服务器的域名和ip地址

'PORT': '3306', # mysql的一个端口号,默认是3306,官网上都是字符串.

}

}

创建一个管理员用户taka账号,密码为 taka:

CREATE USER 'taka'@'%'IDENTIFIED BY 'taka';

给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。

GRANT ALL ON . TO 'taka'@'%';

使授权立即生效:

FLUSH PRIVILEGES;

pymsql数据库连接器的配置:

在虚拟环境中安装pymysql:

pip install pymysql

设置连接器为pymysql:

在主目录下的的init.py文件添加下面两句

import pymysql

pymysql.install_as_MySQLdb()

设置时区 TIME_ZONE = 'Asia/ShangHai'

使用django中的模型:

1.在app下面的models.py中创建django的模型类.

例子:

from django.db import models

# Create your models here.
class Students(models.Model):
   name = models.CharField(max_length=20) #必须有这个参数
   age = models.SmallIntegerField(default=18)
   sex = models.SmallIntegerField(default=1)
   qq = models.CharField(max_length=20,default='')
   phone = models.CharField(max_length=20,default='')
   c_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True) #自动添加参数

将模型类映射到数据库:

1.首先执行以下命令,要创建映射文件

python manage.py makemigrations #命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行.在项目根目录下

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

python manage.py migrate

在执行前,保证我们创建模型的APP是已经注册过的APP

将模型类映射到数据库:

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

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

数据的增删改查----------增加数据

1.在视图函数中导入User模型类,然后使用下面的方法添加数据

数据的增删改查----------查找数据

2.在视图函数中导入User模型类,实现简单的查找

objects是django.db.models.manager.Manager 管理器.

通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的str的格式.

all()和filter()方法返回的是QuerySet对象,是查询集.

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

get_or_create()返回的是一个元组,第一个参数是数据,第二个参数是返回是否创建成功.

数据的增删改查--------数据库相关的接口(QuerySet API)

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

2.QuerySet是可迭代对象.

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

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

数据的增删改查----------修改数据

3.在视图函数中导入User模型类,然后使用下面的方法更新数据

在这之前,我们在模型类中添加了一个city的属性,并设置了一个默认值,然后执行了映射命令,将字段成功映射到了数据库中.

数据的增删改查----------删除数据

4.在视图函数中导入User模型类,然后使用下面的方法删除数据

某个对象是否有某种方法,可以通过dir(obj)来进行查看.

装饰器调用加括号与不加括号的实现,内层加一层装饰器代码,判断是否可调用函数,从而实现脱去了外层的括号

def log(func=None):

def wrapper(fun):

def inner(args,kwargs):

print('do something')

res = fun(args,kwargs)

print('do something')

return res

return inner

if func is None:

return wrapper

elif callable(func):

return wrapper(func)

@log() #my_func = log()(my_func) 对应第一条判断

@log #my_func = log(my_func) 对应第二条判断

def my_func():

print('i am my_func')

django shell

python manage.py shell

from teacher.models import Student

Student.objects.all()

s1 = Student(name='王超',age=25,qq='12345')

s1.save()

在类里面定义Student.objects.all()的输出 def --str--(self):

return '%s-%s'%(self.name,self.age)

res = Students.objects.all()

print(res.query) #返回一个sql语句.

Student.object.get(pk=1) #pk代表了主键,不管其实际名称是什么.这么写就一定没错.

Student.object.filter(name='王超').update(age=18),可修改多条

s.age=18

s.save() 直接修改

Django框架基础知识06-模型基础的更多相关文章

  1. day01<计算机基础知识&Java语言基础>

    计算机基础知识(计算机概述) 计算机基础知识(软件开发和计算机语言概述) 计算机基础知识(人机交互) 计算机基础知识(键盘功能键和快捷键) 计算机基础知识(如何打开DOS控制台) 计算机基础知识(常见 ...

  2. Django框架 之 ORM中介模型

    Django框架 之 ORM中介模型 中介模型 处理类似搭配 pizza 和 topping 这样简单的多对多关系时,使用标准的ManyToManyField  就可以了.但是,有时你可能需要关联数据 ...

  3. PHP丨PHP基础知识之PHP基础入门——函数「理论篇」

    前两天讲过PHP基础知识的判断条件和流程控制,今天来讲讲PHP基础知识之PHP基础入门--函数! 一.函数的声明与使用 1.函数名是标识符之一,只能有数字字母下划线,开头不能是数字. 函数名的命名,须 ...

  4. django框架预备知识

    内容: 1.web预备知识 2.django介绍 3.web框架的本质及分类 4.django安装与基本设置 1.web预备知识 HTTP协议:https://www.cnblogs.com/wyb6 ...

  5. Django 框架 基本知识

    一.什么事web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支持结构,使用框架可以使我们快速开发特定的系统,简单来说,就是讲实现方式的底层结构进行封装,提供相应的 ...

  6. [Python] Django框架入门2——深入模型

    说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...

  7. django基础知识之模型查询:

    查询集表示从数据库中获取的对象集合 查询集可以含有零个.一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 接下来主 ...

  8. django 数据库配置 ,APP 迁移.模型基础

    # 1.数据库的连接配置django 连接mysql的配置流程:- 安装 pymysql pip install pymysql- 创建数据库用户有创建数据库权限的用户- 创建数据库crm .进入数据 ...

  9. 关于CSS你应该知道的基础知识 - 盒模型篇

    浏览器渲染引擎通过盒模型的方式来布局html元素.我们可以将每一个html元素都看做是一个盒子,每一个盒子都有长和款,多个这样的盒子组成了我们的网页. Margin,Border,Padding 每一 ...

随机推荐

  1. P1229-神秘岛

    神秘岛 描述 Description FireDancer来到一个神秘岛,他要从岛的西头到东头然后在东头的码头离开.可是当他走了一次后,发现这个岛的景色非常的美丽,于是他从东头的传送门传到了西头,换了 ...

  2. GitHub笔记---邮箱访问错误

    GitHub地址太长,所以需要一个变量来保存 把远程仓库赋值给一个变量,以后就用就这变量代表这个地址 GitHub推送push 推送过程中发生一个小插曲,出现了错误,错误提示我复制过来吧 remote ...

  3. USACO Training3.2 01串 By cellur925

    题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...

  4. Nginx系列篇四:Nginx+keepalived搭建一个高可用的双机双主热备

    建议:先阅读Nginx+keepalived主从配置,因为此篇是接着上篇开始的 上一篇我们简单的介绍了主从配置及其缺点,我们看一下双主热备配置: 2台Nginx+keepalived互为主备,各自绑定 ...

  5. charles之抓包和断点

    一 .charles抓包 Charles抓包很简单,只要手机设置代理即可,不会的也可以去百度. 在这里是要记录抓包过程中win10遇到的问题,手机代理设置没问题但是就是抓不到包的情况 1.关闭防火墙 ...

  6. javascript简单的表单验证

    <html> <head> <title>用户登录</title> <script language="javascript" ...

  7. 分区表,磁盘概念和parted的使用

    分区表,磁盘概念和parted的使用 登录陌生系统首先要做的事: 个人认为,首先得知道Linux版本的什么:cat /etc/issue df:查看磁盘的分区和数据的分配情况,类型(NFS,ext4. ...

  8. 2019/05/11 JAVA虚拟机原理堆、栈、方法区概念区别

    Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...

  9. 【学习笔记】比特(bit)、字,字节(B)存储单位之间的关系+其与操作系统位数的关系+不同编译器编译方式下数据类型的表示范围

    1.在表示网络传输速度中与表示存储单位的不同: 表示存储单位时:1kB=1024B,但在网络中表示传输速度是1KB=1000B 2.下面介绍表示存储单位时的关系及其与操作系统位数的关系: 1B=8bi ...

  10. IDEA一些设置

    1. 设置字体为Consolas,Size:16, Line spacing: 1.1 2. 设置智能提示大小写不敏感 在设置中搜索sense, 找到配置节点 Editor->General-& ...