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自动化测试之setUp与tearDown实例
Sep 28 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
Python 字典与字符串的互转实例
Jan 13 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
Django model update的多种用法介绍
Mar 28 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python函数参数分类原理详解
May 28 Python
win10安装python3.6的常见问题
Jul 01 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
Jan 05 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
如何离线执行php任务
2017/02/21 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
js 利用className得到对象的实现代码
2011/11/15 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
python实现简单井字棋小游戏
2020/03/05 Python
python使用openpyxl操作excel的方法步骤
2020/05/28 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
python3判断IP地址的方法
2021/03/04 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
SQL注入攻击的种类有哪些
2013/12/30 面试题
简历的个人自我评价范文
2014/01/03 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
师范生见习报告范文
2014/11/03 职场文书
旅游投诉信范文
2015/07/02 职场文书
2016年安全月活动总结
2016/04/06 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL