django的ORM操作 增加和查询


Posted in Python onJuly 26, 2019

ORM 对象关系映射

在数据库中,实现对数据的增删改查,使用的是SQ语句,

在django中,通过python代码,实现对数据库的增删改查,这就是ORM。

在python中,用类名 代表 django数据库的表名,

用对象 ,代表django数据库的一条记录,

ORM 就是封装了SQ语句,给对象进行增删改查,实现对数据库的操作,

在settings 文件中,默认了splite的数据库,自己可以修改

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  }
}<br data-filtered="filtered"><br data-filtered="filtered">BASE_DIR 是代表当前的文件夹 settings,

django对数据库的迁移,只需要修改配置即可,

===

在model文件中,设计表,,

from django.db import models

# Create your models here.

#继承来自models ,
class Book(models.Model):
  name = models.CharField(max_length=32)
  price = models.IntegerField()
  Date = models.DateField()
  auth = models.CharField(max_length=32)
  publish = models.CharField(max_length=32)

命令台执行命令。

python manage.py makemigrations 
python manage.oy migrate

生成数据库表

在template ,写一个主页index.html文件,用于显示添加后书籍

{% load staticfiles %} #  ------引用静态文件
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <link rel="stylesheet" href="{% static '/bootstrap-3.3.7/dist/css/bootstrap.css/' %}" rel="external nofollow" >  # ---导入bootstrap 文件

  <style>

    .container{
      margin-top: 50px;
    }

  </style>

</head>
<body>


<div class="container">
  <div class="row">


    <div class="col-md-6 col-md-offset-2">
    <a href="/addbook/" rel="external nofollow" ><button class="btn btn-primary">添加书籍</button></a>
    <table class="table table-striped">
      <tr>
        <th>ID</th>
        <th>书名</th>
        <th>价格</th>
        <th>出版日期</th>
        <th>作者</th>
        <th>出版社</th>
      </tr>
{#      <tr>#}
{#        <td>1</td>#}
{#        <td>水浒城</td>#}
{#        <td>110</td>#}
{#        <td>2011.1.1</td>#}
{##}
{#        <td>egon</td>#}
{#        <td>人民出版社</td>#}
{#      </tr>#}
{#       <tr>#}
{#        <td>2</td>#}
{#        <td>水浒城</td>#}
{#        <td>110</td>#}
{#        <td>2011.1.1</td>#}
{##}
{#        <td>egon</td>#}
{#        <td>人民出版社</td>#}
{#      </tr>#}
       {% for book in book_list %}  #--从数据库取到的数据是一个QuerySet集合,进行for循环,遍历出每个对象,
      <tr>

          <td>{{ book.id }}</td> #---把每个对象的属性的值渲染出来,
          <td>{{ book.name }}</td>
          <td>{{ book.price }}</td>
          <td>{{ book.Date }}</td>
          <td>{{ book.auth }}</td>
          <td>{{ book.publish }}</td>

      </tr>
      {% endfor %}
    </table>

  </div>
  </div>

</div>
</body>

<script>


</script>

</html>

写一个addbook.html 文件,用于添加书籍,然后跳转到index页面

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <link rel="stylesheet" href="{% static '/bootstrap-3.3.7/dist/css/bootstrap.css/' %} " rel="external nofollow" >

  <style>
    .container{
      margin-top: 50px;
    }
  </style>

</head>
<body>


<div class="container">

  <div class="row">

    <div class="col-md-6 col-md-offset-2">
{#      {{ csrf-token }}#}
      <form class=addbook" action="/addbook/" method="post">

{#      当点击添加按钮时,是执行视图函数,在数据库中添加一条记录,然后再把这个记录添加到index页面#}

      <div class="form-group">
        <label for="bookname">书名:</label>
        <input type="text" class="form-control" id="bookname" name="bookname">  #---input 中的name属性,用于获取输入的值,
      </div>
      <div class="form-group">
        <label for="price">价格:</label>
        <input type="text" class="form-control" id="price" name="price"> #---input 中的name属性,用于获取输入的值,
      </div>
      <div class="form-group">
        <label for="Date">日期:</label>
        <input type="text" class="form-control" id="Date" name="Date">  #---input 中的name属性,用于获取输入的值,
      </div>
      <div class="form-group">
        <label for="auth">作者:</label>
        <input type="text" class="form-control" id="auth" name="auth">  #---input 中的name属性,用于获取输入的值,
      </div>

      <div class="form-group">
        <label for="publish">出版社:</label>
        <input type="text" class="form-control" id="publish" name="publish">  #---input 中的name属性,用于获取输入的值,
      </div>

      <input class="btn btn-info" type="submit" value='添加'>

      </form>



    </div>
  </div>

</div>


</body>

</html>

在url文件中,匹配index页面和addbook页面的视图函数

from django.conf.urls import url
from django.contrib import admin

from app01 import views

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^index/$',views.index),
  url(r'^addbook/$',views.addbook),
]

在views文件中,写逻辑代码。用户访问index页面,点击添加按钮,跳到addbook页面添加数据后,提交后,存到数据库,再从数据库拿到数据显示到index页面

步骤1,在index页面要显示数据库的信息,就要导入Book表,获取所有的数据,return render 进行渲染到页面展示

步骤2 ,addbook函数,从form表单中拿到添加的数据,从request里,以post的方法拿到,

存到数据库,用create方法,表名.objects .create(数据库的字段名= 表单中的name的属性名)

Book.objects.create(name = bookname,price = price, Date = Date, auth = auth , publish = publish)

左边的name 是models里的字段名,对应到form里取到的值,

from django.shortcuts import render,redirect

# Create your views here.
from app01.models import Book

def index(request):

  #把数据库的数据嵌入到页面进行显示
  #查询api,所有书籍
  book_list = Book.objects.all() #数据类型是QuerySet:[book1,book2...]

  return render(request,'index.html',locals())


def addbook(request):

  #是form提交post的方法,
  if request.method == 'POST':
    #从form表单取数据
    bookname = request.POST.get('bookname')
    price = request.POST.get('price')
    Date = request.POST.get('Date')
    auth = request.POST.get('auth')
    publish = request.POST.get('publish')

  #把数据存到数据库,先把models 中的表引导到views文件

  #方法1,左边的name 是models里的字段名,对应到form里取到的值,


    Book.objects.create(name = bookname,price = price, Date = Date, auth = auth , publish = publish)


  #存到数据库后要放到index页面,但现在是addbook页面,所以要跳转

    return redirect('/index/')

  return render(request,'addbook.html')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Django中django-userena组件的简单使用教程
May 30 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
Feb 03 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python实现针对给定字符串寻找最长非重复子串的方法
Apr 21 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
python实现自动化群控的步骤
Apr 11 Python
Django在pycharm下修改默认启动端口的方法
Jul 26 #Python
Python解析命令行读取参数之argparse模块
Jul 26 #Python
Django Rest framework三种分页方式详解
Jul 26 #Python
浅析Windows 嵌入python解释器的过程
Jul 26 #Python
python flask几分钟实现web服务的例子
Jul 26 #Python
解决python flask中config配置管理的问题
Jul 26 #Python
Django REST framework内置路由用法
Jul 26 #Python
You might like
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
javaScript语法总结
2016/11/25 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
Python批量转换文件编码格式
2015/05/17 Python
Python中字符串的处理技巧分享
2016/09/17 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
电大自我鉴定
2013/10/27 职场文书
使用python绘制横竖条形图
2022/04/21 Python