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、Javascript中的闭包比较
Feb 04 Python
Pycharm远程调试openstack的方法
Nov 21 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
详解python的argpare和click模块小结
Mar 31 Python
基于Python的PIL库学习详解
May 10 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
Python数据可视化:顶级绘图库plotly详解
Dec 07 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python通配符之glob模块的使用详解
Apr 24 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
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
python 字段拆分详解
2019/12/17 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
电信营业员自我评价分享
2014/01/17 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
计算机学生求职信范文
2014/01/30 职场文书
事业单位考核材料
2014/05/21 职场文书
政风行风评议整改方案
2014/09/15 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
2015年除四害工作总结
2015/07/23 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
如何使JavaScript休眠或等待
2021/04/27 Javascript