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 实现堆排序算法代码
Jun 05 Python
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python编程实现归并排序
Apr 14 Python
python中logging库的使用总结
Oct 18 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 Python
Python3 webservice接口测试代码详解
Jun 23 Python
python3.7调试的实例方法
Jul 21 Python
如何真正的了解python装饰器
Aug 14 Python
彻底解决Python包下载慢问题
Nov 15 Python
如何在vscode中安装python库的方法步骤
Jan 06 Python
Python turtle实现贪吃蛇游戏
Jun 18 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脚本的10个技巧(6)
2006/10/09 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
python爬虫之百度API调用方法
2017/06/11 Python
Python探索之Metaclass初步了解
2017/10/28 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
python实现随机漫步算法
2018/08/27 Python
python 公共方法汇总解析
2019/09/16 Python
python实例化对象的具体方法
2020/06/17 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
个人职业生涯规划书1500字
2013/12/31 职场文书
核心价值观演讲稿
2014/05/13 职场文书
2014年国庆节寄语
2014/09/19 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
职工食堂管理制度
2015/08/06 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL