Django

  1. Django的ORM简介
  2. 数据库连接配置
  3. 模型的创建与映射
  4. 数据库的增删改查
    1. 增数据
    2. 查数据及补充
    3. 改数据
    4. 删数据

 

Django的ORM系统分析

  1. ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
  2. ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。

Django的模型映射关系

  • 模型类必须都写在app下的models.py文件中。
  • 模型如果需要映射到数据库,所在的app必须被安装.
  • 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

 

数据库的配置

在项目的settings文件中的DATABASES

注意:NAME是数据库的库名,在使用之前,需要先在数据库中新建一个对应名字的database

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.msyql',
'NAME': database_name,
'USER': username,
'PASSWORD': password,
'HOST': '127.0.0.1',
'PORT': ''
}
}
  • 创建一个管理员用户pywjh账号,密码为 pywjh:CREATE USER 'pywjh'@'%'IDENTIFIED BY 'pywjh';
  • 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。
    • GRANT ALL ON *.* TO 'pywjh'@'%';
  • 使授权立即生效:FLUSH PRIVILEGES;

pymsql数据库连接器的配置

设置连接器为pymysql:
在主目录下的的__init__.py文件添加下面两句

import pymysql
pymysql.install_as_MySQLdb()

使用Django中的模型

首先,在哪个APP下创建模型,都要先在settings中注册APP

APP  my_sql下的models.py

from django.db import models

# Create your models here.
class User(models.Model):
id = models.AutoField(primary_key=True) # id属性,不用添加Django也会自动添加
name = models.CharField(max_length=10)
age = models.IntegerField() def __str__(self): # 定义输出方法,在查询的时候使用
return 'User<id=%s, name=%s, age=%s>'%(
self.id, self.name, self.age
)
 然后在创建映射文件:( 后面可以跟APP的名字,不跟则表示全部都映射)
python manage.py makemigrations [app_name]

将映射数据提交到数据库中:

python manage.py migrate [app_name]

这是就会在数据库中看到自己创建的模型

打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.


 数据库的增删改查

增:

配置到url后,在视图views中:

from django.http import HttpResponse
from .models import User def add(request):
# # 方法一
# user = User()
# user.name = '张三'
# user.age = 22
# user.save()
# # 方法二
# user = User(name='李四', age=23).save()
# # 方法三
# User.objects.create(name='王五', age=22)
# 方法四
User.objects.get_or_create(name='周六', age=24) # 这个方法不会重复添加 return HttpResponse('添加数据成功')

检查数据库:

查:

views中:

查看全部数据

from django.http import HttpResponse
from .models import User def get(request):
# 获取全部数据
result = User.objects.all()
print(result)
return HttpResponse('查询数据成功')

User.objects.all()——后台输出:

查询一个数据:

def get(request):
# 查村一个数据
result = User.objects.get(id=1)
print(result) return HttpResponse('查询数据成功')

查询满足条件的数据:

def get(request):
# 查询满足条件的数据
result = User.objects.filter(name='王五')
print(result) return HttpResponse('查询数据成功')

注意:

  • 通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.
  • all()和filter()方法返回的是QuerySet对象.
  • get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
  • 1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
  • 2.QuerySet是可迭代对象.
  • 3.QuerySet支持切片, 不支持负索引.
  • 4.可以用list强行将QuerySet变成列表.

补充:

获取一个属性的搜索数据:

def get(request):
# 单独获取一个属性的全部数据
result = User.objects.values('age')
print(result) return HttpResponse('查询数据成功')

去重:

def get(request):
# 单独获取一个属性的全部数据,并去重
result = User.objects.values('age').distinct()
print(result) return HttpResponse('查询数据成功')

改:

在操作之前,先在models中在添加一个city的属性,规定模型添加属性要加上默认值,不要忘记创建映射文件已经映射数据

from django.db import models

# Create your models here.
class User(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=10)
age = models.IntegerField()
city = models.CharField(max_length=20, default='北京') def __str__(self):
return 'User<id=%s, name=%s, age=%s>'%(
self.id, self.name, self.age
)

映射文件以后再查看数据库:

views:

def update(request):
# 先查找到数据在进行修改
res = User.objects.get(name='张三')
res.city = '武汉'
res.save()
# 用update直接修改 # update针对的是QuerySet类型的数据
User.objects.filter(name='李四').update(city='重庆')
return HttpResponse(' 数据修改成功')

删:

所有的方法都是用与delete方法

def delete(request):
result = User.objects.get(id=1)
result.delete() User.objects.filter(name='周六').delete()
return HttpResponse('删除数据成功')

Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查的更多相关文章

  1. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  2. Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查

    本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...

  3. django学习-12.访问不同url/接口地址实现对指定数据的增删改查功能

    1.前言 通过前面博客[django学习-10.django连接mysql数据库和创建数据表]里的操作,我们已经成功在数据库[hongjingsheng_project]里创建了一张数据表[hello ...

  4. java使用原生MySQL实现数据的增删改查以及数据库连接池技术

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: <dependency> <groupId> ...

  5. Django之数据表增删改查

    Django数据增删改查: 上课代码 from django.shortcuts import render,HttpResponse # Create your views here. from a ...

  6. MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]

    MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ...

  7. Django创建并连接数据库(实现增删改查)--ORM框架雏形

    第一步:要先创建数据库(orm是不能创建数据库的) 第二步:settings里面指定连接到哪个数据库 DATABASES = { #默认使用的是sqlite3数据库 'default': { 'ENG ...

  8. django(八)之数据库表的一对多,多对多表-增删改查

    单表操作 表记录的添加 方式一: Book() b=Book(name="python基础",price=99,author="yuan",pub_date=& ...

  9. Django创建并连接数据库(实现增删改查)--第二版

    注意点一: url里面的地址,不只是html页面,准确说是views视图里面对应的函数方法 <!DOCTYPE html> <html lang="en"> ...

随机推荐

  1. go语言笔记——map map 默认是无序的,不管是按照 key 还是按照 value 默认都不排序

    示例 8.1 make_maps.go package main import "fmt" func main() { var mapLit map[string]int //va ...

  2. ubuntu系统快捷键设置

    1.打开'系统设置' 2.点击键盘 3.选择快捷键,查看和修改对应的快捷键.

  3. Gold Coins

    http://poj.org/problem?id=2000 #include<stdio.h> ; int main() { int coin[N]; ,j,k; j = ; k = ; ...

  4. [Swift通天遁地]八、媒体与动画-(8)使用开源类库快速实现位移动画

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. 自动调整速率的Actor设计模式

    问题背景 与数据库或者存储系统交互是所有应用软件都必不可少的功能之一,akka开发的系统也不例外.但akka特殊的地方在于,会尽可能的将所有的功能都设计成异步的,以避免Actor阻塞,然而无法避免IO ...

  6. lua_string_pattern

    两大特点: 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个新的字符串. 库函 ...

  7. iOS图片瘦身总结

    前言 最近在公司写了个小程序来为iOS应用中的图片瘦身,进而减小APP大小,减少用户下载时的流量. 瘦身是在一个专门为图片瘦身的网站进行的. 地址:https://tinypng.com 这个网站提供 ...

  8. [ NOIP 2002 ] TG

    \(\\\) \(\#A\) 均分纸牌 有\(N\)堆纸牌,每堆有若干张,但纸牌总数必为\(N\)的倍数.可以在任一堆上取若干张纸牌,然后移动给其左右任意一侧的纸牌堆,求将所有的牌堆牌数都变为平均值最 ...

  9. cordova插件分类

    1.android自动更新功能所需插件 cordova plugin add https://github.com/whiteoctober/cordova-plugin-app-version.gi ...

  10. 大白_uva10795_新汉诺塔

    题意:给出所有盘子的初态和终态,问最少多少步能从初态走到终态,其余规则和老汉诺塔一样. 思路: 若要把当前最大的盘子m从1移动到3,那么首先必须把剩下的所有盘子1~m-1放到2上,然后把m放到3上. ...