一、创建及映射(orm_intro_demo文件

  1. 在项目新建App下的models.py文件下新建ORM模型:

     from django.db import models
    
     #如果要将一个普通的类变成一个可以映射到数据库中的ORM模型
    #那么必须要将父类设置成models.Model或者他的子类
    class Book(models.Model):
    # id:int类型,是自增长的
    id = models.AutoField(primary_key=True)
    # name:varchar(100),图书的名字
    name = models.CharField(max_length=100,null=False)
    # author:varchar(100),作者的名字
    author = models.CharField(max_length=100,null=False)
    # price:float,图书的价格
    price = models.FloatField(null=False,default=0)
  2. 然后使用 makemigrations 生成迁移脚本文件,会在App的 migrations 文件下生成一个 0001_initial.py 的脚本文件:
     #cmd运行
    python manage.py makemigrations
  3. 再使用 migrate  将新生成的迁移脚本文件映射数据库中:
     #cmd运行
    python manage.py migrate
  4. 在数据库中将显示models.py文件代码的内容:

二、数据库的增删改查

  1. models.py 文件:

     from django.db import models
    
     class Book(models.Model):
    name = models.CharField(max_length=100,null=False)
    author = models.CharField(max_length=100,null=False)
    price = models.FloatField(default=0) def __str__(self):
    # 查找数据时以该方式进行打印输出: <Book:(name,author,peice)>
    return '<Book:({name},{author},{price})>'.format(name=self.name,author=self.author,price=self.price)
  2. views.py 文件的 index 函数对数据库进行修改:
     from django.shortcuts import render
    from django.http import HttpResponse
    from .models import Book def index(request):
    # 1、使用ORM添加一条数据到数据库中,运行一次添加一条数据;
    book = Book(name='西游记',author='吴承恩',price=100)
    book.save() # 2、查询:
    # 2.1、根据主键primary key进行查找
    book = Book.objects.get(pk=1)
    print(book)
    # 2.2、根据其他条件进行查找
    books = Book.objects.filter(name='西游记').first()
    print(books)
    #输出:<Book:(西游记,吴承恩,100.0)> # 3、删除数据
    book = Book.objects.get(pk=1)
    book.delete() # 4、修改数据
    book = Book.objects.get(pk=2)
    book.name = '三国演义'
    book.author = '罗贯中'
    book.save()
    return HttpResponse('添加数据成功')

migrate做了哪些事:

  1. 将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句;
  2. 如果这个SQL语句执行没有问题,那么就会将迁移脚本的名字记录到“django_migrations”中。

migrate怎么判断哪些迁移脚本需要执行:

  1. 他会将代码中的迁移脚本和数据库中的“django_migrations”中的迁移脚本进行对比,如果发现数据库中没有这个迁移脚本,那么就会执行这个迁移脚本。

执行migrate命令时报错的解决方法:

  • 原因:数据库的“django_migrations”表中的迁移版本记录和代码中的迁移脚本不一致导致的。
  • 解决方法:
    • 使用--fake函数:首先对比数据库的迁移脚本和代码中的迁移脚本,然后找到那个不同,之后再使用“--fake”,将代码中的迁移脚本添加到“django_migrations”中,但是并不会执行SQL语句,可避免每次执行“migrate”的时候,都会执行一些重复的迁移脚本。
    • 终极解决方法:如果代码中的迁移脚本和数据库中的迁移脚本太多搞不清楚,可使用此方法;
      1. 放弃出问题的APP的所有迁移脚本文件,再在“djang_migrations”表中将相关迁移记录删掉,(不能删除“__init__”文件);
      2. 将出问题的APP下的所有模型和数据库表保持一致,重新映射,使用“makemigrations”重新将模型生成一个迁移脚本;
      3. 可用“migrate --fake-initial”参数,将刚生成的迁移脚本文件标记为已经完成,后可继续做其它映射。

ORM模型的更多相关文章

  1. laravel框架总结(八) -- ORM模型

    ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...

  2. Django ORM模型的一点体会

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  3. Django ORM模型:想说爱你不容易

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...

  4. django ORM模型表的一对多、多对多关系、万能双下划线查询

    一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...

  5. django创建ORM模型、通过ORM模型操作单个表、ORM模型常用字段

    一.ORM简介 ORM ,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句.通过把表映射成类,把行作 ...

  6. laravel ORM 模型关联 with () 用法

    关联时想对关联表数据筛选时:MySQL查询: SELECT * FROM A LEFT JOIN B ON A.B_id = B.id AND B.condition = $condition ORM ...

  7. 通过ORM模型看python对象创建过程

    简易django ORM模型如下所示: #!/usr/bin/env python # encoding: utf-8 """ @version: 1.0 @author ...

  8. Eloquent ORM模型中添加自定义值

    我们都知道通过Laravel中数据库查询出来的模型对象都是基于数据库字段,今天给大家展示一个 Laravel Eloquent ORM 模型特性-附加值不存在于数据表中. 举个简单的栗子,一篇文章(p ...

  9. ORM模型简介

    ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...

随机推荐

  1. php验证18位身份证,准到必须输入正确的身份证号,

    /** * 验证18位身份证(计算方式在百度百科有) * @param string $id 身份证 * return boolean */ function check_identity($id=' ...

  2. mysql8.0发布新特性

    2018年4月21日 14:36:42 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-b ...

  3. F#周报2019年第2期

    新闻 Rider上的拼写助手,对未使用引用的代码分析及更多F#相关特性的更新 .NET开源革命开始 ML.NET 0.9发布记录 测试驱动的集成开发环境 Giraffe在GitHub上超过了1000个 ...

  4. select()函数 的学习

    select()的介绍 全是拷贝的如下文章: https://www.cnblogs.com/wenqiang/p/5508541.html select()函数的用例代码摘录如下文章: https: ...

  5. node os模块

    const os = require('os'); console.log(os.homedir()); console.log(os.hostname()); console.log(os.plat ...

  6. 关于${pageContext.request.contextPath}的理解 (转载)

    ${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%> . 也就是取出部署的应用程 ...

  7. 腾讯云主机及CentOS7.2简单上手体验

    前段时间拜读了崔庆才老师的<Python③网络爬虫开发实战>受益良多,对于初学爬虫的新手来说,本书真可谓是通俗易懂,非常适合新手入门.但是受制于没有服务器环境,书中很多例子难以模拟!最近正 ...

  8. 关于Java8 Stream流的利与弊 Java初学者,大神勿喷

    题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...

  9. js 获取时区

    js的时区函数: 设datename为创建的一个Date对象 ====================datename.getTimezoneOffset()--取得当地时间和GMT时间(格林威治时间 ...

  10. React 添加对 Less 的支持, 使用 create-react-app 脚手架

    ---恢复内容开始--- 参考博客与我自己的当前版本有一点出入, 所以就将 参考博客写到文章后面去了. 我的电脑:  系统: Ubuntu16.04, 1, 安装脚手架: create-react-a ...