day04 orm操作

昨日内容回顾

  • 小白必会三板斧
  • request对象方法
  • 静态文件
  • 请求方式
  • python链接数据库
  • django链接数据库

小白必会三板斧

HttpResponse :返回前端浏览器文本

render:返回html文件
render(request,'index.html',{'name_list':[meng,zhang]})
render(request,'index.html',locals()) redirect:重定向
redirect('https://www.baidu.com')
redirect('/index/')

request对象方法

request.method  : 获取请求方式(字符纯大写)

request.POST	: 获取请求的数据
request.POST.get() # 获取列表最后一个数据
request.POST.getlist() # 获取整个列表 reuqest.GET ;获取get请求url问号后面的是数据
request.GET.get()
reguest.GET.getlist()

静态文件

静态文件:css js img 第三方组件
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]

请求方式

get:向别人索要数据
post:向别人提交数据

django链接数据库

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'db1'
'HOST': '127.0.0.1',
'PORT':3306,
'URSE':'root',
'PASSWORD':'123',
'CHARSET':'utf8'
} import pymysql
pymysql.install_as_MySQLdb()

今日内容概要

  • django orm简介
  • orm创建表
  • orm字段增删改查
  • orm记录增删改查
  • orm外键的创建

django orm简介

1、什么是OPM?
ORM:对象关系映射 2、为什么要用ORM?
能够让不会写SQL语句的python程序员
使用面向对象的语法即可简单快捷的操作MySQL,极大地提升开发效率
'''但是ORM有时候自动生成的SQL效率可能会很低''' 类 表
对象 一行行记录
对象点属性 记录某个字段对应的值
# 如何使用ORM?
在django应用文件夹下的models.py中操作 """orm无法创建库 需要自己提前创建好"""

orm创建表

# 强调:只要在models.py中改动了与数据库相关的代码,就必须重新执行迁移命令

1、先在models.py中创建表

	1)在models.py创建字段
class User(models.Model): # 相当于create table user
id = models.AutoField(verbose_name='编号',primary_key=True) # 创建主键
name = models.CharField(verbose_name='姓名',max_length=32) # name charvar(32)
pwd = models.IntegerField(verbose_name='密码') # pwd int verbose_name:注释 2)主键字段可以不用创建,orm自动帮你创建一个名为id的主键字段。
# 但是主键字段只能名为id,别的主键字段名称只能自己创建 2、执行数据库迁移命令(在命令行执行)
1)执行迁移命令
python3 manage.py makemigrations # 将改动的记录在migrations文件夹中
# 可能缺少底层文件:pip3 install pillow 2)确认提交给数据库(真正修改数据库)
python3 manage.py migrete # 迁移命令快捷方式:
pycharm快捷提示 : tools >>> run manage.py task

orm创建注意事项

1、主键字段orm会自动创建 只不过名字固定为id
2、CharField字段类型必须要有max_length参数
3、orm无法创建库,只能操作表层级

字段的增删改查

# 增
# 当表中已经有数据存在的情况下如果添加新的字段那么需要设置null或者default
age = models.IntegerField(verbose_name='年龄',null=True)# 一种是字段为空
gender = models.CharField(verbose_name='性别',max_length=32,default='male') # 一种是设置默认值 # 改
代码层面修改后,在执行数据库迁移命令 # 查
pycharm点database中的表 # 删
把相对应的代码注释掉或者删除。但是注释后代码,对应的列数据也会消失。 # 谨慎删除,无法恢复数据

使用Python Console报错信息

把python/helpers/third_party/thriftpy/_shaded_thriftpy/_compat.py文件出错的地方的代码改为:

if PY3:
args = [len(varnames),
0,
len(varnames),
code.co_stacksize,
code.co_flags,
code.co_code,
code.co_consts,
code.co_names,
varnames,
code.co_filename,
"__init__",
code.co_firstlineno,
code.co_lnotab,
code.co_freevars,
code.co_cellvars]
if sys.version_info >= (3, 8, 0):
#Python 3.8 and above supports positional-only parameters. The number of such
#parameters is passed to the constructor as the second argument.
args.insert(2, 0)
new_code = types.CodeType(*args)
elif JYTHON:
from org.python.core import PyBytecode

数据的增删改查

查询
1、全部查询
models.User.objects.all() # all:拿取全部 2、条件查询
models.User.objects.filter(name='meng') # filter:过滤
models.User.objects.filter(name='meng',password='123') # 多条件查询,逗号相当于and 3、实例化对象查询
user_obj = models.User.objects.filter(name='meng').firle()
user_obj.name <QuerySet [<User: mengNB6661>, <User: zhang>, <User: liu11>, <User: meng>]>
# QuerySet我们可以简单的理解为是列表套一个个数据对象
增加
1、普通增加
models.User.objects.create(name='gao',password='123') 2、对象增加
obj = models.User(name='li',password='113') # 在没保存之前,不会对数据库进行更改
obj.password = 333 # 没保存之前可以修改数据
obj.save() # 对象调用save方法保存到数据库
修改
1、先查询在修改
cat_obj = models.User.objects.filter(id=3)[0] # 类产生对象
cat_obj.name='liu11' # 对象调用修改
cat_obj.save() # 对象调用save方法保存到数据库 2、直接修改 # 常用
models.User.objects.filter(name='meng').update(name='mengNB')
# update user set name='jasonNB' where name='jason';
删除
1、直接删除
models.User.objects.filter(id=8).delete()
# delete from user where id=5;

orm外键创建

一对多外键关系
"""在orm中 外键字段建在多的一方"""
多对多外键关系
"""在orm中 可以直接写在查询频率较高的表中(自动创建第三张表)"""
一对一外键关系
"""在orm中 直接写在查询频率较高的表中""" # 一对多
publish = models.ForeignKey(to='Publish')
# 多对多
authors = models.ManyToManyField(to='Author') # 自动创建书籍和作者的第三张关系表
# 一对一
author_detail = models.OneToOneField(to='AuthorDetail') """
ForeignKey OneToOneField 会自动给字段加_id后缀
"""
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2)
# 一对多
publish = models.ForeignKey(to='Publish')
# 多对多
authors = models.ManyToManyField(to='Author') # 自动创建书籍和作者的第三张关系表 class Publish(models.Model):
title = models.CharField(max_length=32) class Author(models.Model):
name = models.CharField(max_length=32)
# 一对一
author_detail = models.OneToOneField(to='AuthorDetail') class AuthorDetail(models.Model):
addr = models.CharField(max_length=32)
phone = models.BigIntegerField()

数据展示页小练习

首页

def home(request):
# 1.查询user表中的所有数据
user_data = models.User.objects.all()
# 2.将数据利用模板语法传递给html文件
return render(request,'home.html',locals())

注册

def register(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 先比对用户名是否重复
is_exists = models.User.objects.filter(name=username) # 如果有值,代表用户名重复了
if is_exists:
return HttpResponse('用户名已存在')
# 将用户数据写入数据库
models.User.objects.create(name=username,password=password)
# 返回数据展示页面
return redirect('/home/')
return render(request,'register.html',locals())

删除数据

def data_delete(request):
# 获取用户需要删除的唯一标识
delete_id = request.GET.get('delete_id')
# 利用orm删除即可
models.User.objects.filter(id=delete_id).delete() # 先利用条件筛选出来,再删除
# 返回数据展示页
return redirect('/home/')

修改数据

def cat_edit(request):
# 1.获取用户想要修改唯一主键标识
edit_id = request.GET.get('edit_id') if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 修改表数据
models.User.objects.filter(id=edit_id).update(name=username,password=password)
# 返回展示页
return redirect('/home/')
# 2.查询用户想要修改的数据
edit_obj = models.User.objects.filter(id=edit_id).first() # 列表套对象
'''filter取值的结果是一个列表套对象,在取值的情况下推荐用first方法'''
# 3.返回给用户一个编辑页面,上面写好用户编辑的数据
return render(request,'cat_edit.html',locals())

主页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">数据展示页面</h1>
<div class="col-md-8 col-md-offset-2">
<table class="table table-hover table-striped">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>others</th>
</tr>
</thead>
<tbody>
{% for user_obj in user_data %}
<tr>
<td>{{ user_obj.id }}</td>
<td>{{ user_obj.name }}</td>
<td>{{ user_obj.password }}</td>
<td>
<a href="/cat_edit/?edit_id={{ user_obj.id}}" class="btn btn-primary btn-xs">编辑</a>
<a href="/data_delete/?delete_id={{ user_obj.id }}" class="btn btn-danger btn-xs">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="/register/" class="btn btn-success">用户注册</a>
</div>
</div>
</div>
</body>
</html>

day04 orm操作的更多相关文章

  1. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  2. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  3. Django中ORM操作

    ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...

  4. Django的ORM操作

    ORM操作 select * from tb where id > 1 # 对应关系 models.tb.objects.filter(id__gt=1) models.tb.objects.f ...

  5. python 外键用法 多对多关系 ORM操作 模板相关

    一.app/models中写类(设计表结构) 1.普通类 class  A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...

  6. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...

  7. Django之ORM操作(聚合 分组、F Q)

    Django之ORM操作(聚合 分组.F Q) 聚合 aggregate()是QuerySet的一个终止子句,也就是说,他返回一个包含一些键值对的字典,在它的后面不可以再进行点(.)操作.   键的名 ...

  8. python第一百零五天 ---Django 基础 路由系统 URL 模板语言 ORM 操作

    一 路由系统 URL 1 url(r'^index/',views.index) url(r'^home/', views.Home.as_view()) 2 url(r'^detail-(\d+). ...

  9. Django ORM 操作 必知必会13条 单表查询

    ORM 操作 必知必会13条 import os # if __name__ == '__main__': # 当前文件下执行 os.environ.setdefault('DJANGO_SETTIN ...

随机推荐

  1. songwenxin

    # -*- coding: utf-8 -*- import wx from modelmngr_frame import MyFrame1 ############################# ...

  2. 前端面试手写代码——JS函数柯里化

    目录 1 什么是函数柯里化 2 柯里化的作用和特点 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3 封装通用柯里化工具函数 4 总结和补充 1 什么是函数柯里化 在计算机科学中,柯里化(Cu ...

  3. 【mysql3】我的大学teacher课程进行中|持续更新系列!

    1.做一下powerdesigner的画图 2.所有的创建表格 .....1 修改字段的数据类型:alter table 表名 modify 字段名 新数据类型; 修改字段名: alter table ...

  4. github上传和删除文件(三)

    上传文件: git init git add * git commit -m "description" //git remote rm origin 或查看当前 git remo ...

  5. webpack 之js兼容性处理

    webpack 之js兼容性处理 // 用来拼接绝对路径的方法 const {resolve} = require('path') const HtmlWebpackPlugin = require( ...

  6. oxidized备份华为HRP防火墙配置失败问题

    Oxidized备份华为防火墙配置Last Status红色,备份失败,查看oxidized日志(默认是~/.config/oxidized/logs/oxidized.log)能看到报错日志: WA ...

  7. sql关联修改

    UPDATE  p  set p.ClientID = c.id  from PaymentTable p left JOIN ClientTable c on p.ClientID = c.Clie ...

  8. Django笔记&教程 5-1 基础增删查改

    Django 自学笔记兼学习教程第5章第1节--基础增删查改 点击查看教程总目录 第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表. 这一章将介绍如何使用模 ...

  9. Django 小实例S1 简易学生选课管理系统 5 实现注册功能

    Django 小实例S1 简易学生选课管理系统 第5节--实现注册功能 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...

  10. Node常用内置模块

    node内置的fs模块就是文件系统模块,负责读写文件 fs同时提供了同步异步的方法 'use strict'; var fs = require('fs'); fs.readFile('test.tx ...