ORM模型
一、创建及映射(orm_intro_demo文件)
- 在项目新建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) - 然后使用 makemigrations 生成迁移脚本文件,会在App的 migrations 文件下生成一个 0001_initial.py 的脚本文件:
#cmd运行
python manage.py makemigrations - 再使用 migrate 将新生成的迁移脚本文件映射数据库中:
#cmd运行
python manage.py migrate - 在数据库中将显示models.py文件代码的内容:

二、数据库的增删改查
- 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) - 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做了哪些事:
- 将相关的迁移脚本翻译成SQL语句,在数据库中执行这个SQL语句;
- 如果这个SQL语句执行没有问题,那么就会将迁移脚本的名字记录到“django_migrations”中。
migrate怎么判断哪些迁移脚本需要执行:
- 他会将代码中的迁移脚本和数据库中的“django_migrations”中的迁移脚本进行对比,如果发现数据库中没有这个迁移脚本,那么就会执行这个迁移脚本。
执行migrate命令时报错的解决方法:
- 原因:数据库的“django_migrations”表中的迁移版本记录和代码中的迁移脚本不一致导致的。
- 解决方法:
- 使用--fake函数:首先对比数据库的迁移脚本和代码中的迁移脚本,然后找到那个不同,之后再使用“--fake”,将代码中的迁移脚本添加到“django_migrations”中,但是并不会执行SQL语句,可避免每次执行“migrate”的时候,都会执行一些重复的迁移脚本。
- 终极解决方法:如果代码中的迁移脚本和数据库中的迁移脚本太多搞不清楚,可使用此方法;
- 放弃出问题的APP的所有迁移脚本文件,再在“djang_migrations”表中将相关迁移记录删掉,(不能删除“__init__”文件);
- 将出问题的APP下的所有模型和数据库表保持一致,重新映射,使用“makemigrations”重新将模型生成一个迁移脚本;
- 可用“migrate --fake-initial”参数,将刚生成的迁移脚本文件标记为已经完成,后可继续做其它映射。
ORM模型的更多相关文章
- laravel框架总结(八) -- ORM模型
ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...
- Django ORM模型的一点体会
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- Django ORM模型:想说爱你不容易
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 使用Python的Django模型的话,一般都会用它自带的ORM(Object-relational ma ...
- django ORM模型表的一对多、多对多关系、万能双下划线查询
一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_c ...
- django创建ORM模型、通过ORM模型操作单个表、ORM模型常用字段
一.ORM简介 ORM ,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句.通过把表映射成类,把行作 ...
- laravel ORM 模型关联 with () 用法
关联时想对关联表数据筛选时:MySQL查询: SELECT * FROM A LEFT JOIN B ON A.B_id = B.id AND B.condition = $condition ORM ...
- 通过ORM模型看python对象创建过程
简易django ORM模型如下所示: #!/usr/bin/env python # encoding: utf-8 """ @version: 1.0 @author ...
- Eloquent ORM模型中添加自定义值
我们都知道通过Laravel中数据库查询出来的模型对象都是基于数据库字段,今天给大家展示一个 Laravel Eloquent ORM 模型特性-附加值不存在于数据表中. 举个简单的栗子,一篇文章(p ...
- ORM模型简介
ORM模型简介 1>什么是ORM? ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在操作具体的 ...
随机推荐
- CString中 format、trimLeft和trimright、trim 和FindOneOf用法
1.format 可以帮助各种类型转换成CString. a. int 转 CString CString str; int number = 4; str.Format(_T("%d&qu ...
- 多线程之批量插入小demo
多线程之批量插入 背景 昨天在测试mysql的两种批量更新时,由于需要入库大量测试数据,反复执行插入脚本,过程繁琐,档次很低,测试完后我就想着写个批量插入的小demo,然后又想写个多线程的批量插入的d ...
- Python学习之旅(三十)
Python基础知识(29):virtualenv virtualenv:用来为一个应用创建一套隔离的Python运行环境 比如,现有两个Python项目,一个是Python2.7的一个是Python ...
- git fork代码并修改胡提交到自己的git仓库
最近在参加阿里天池大数据中间件比赛(毫无头绪,打酱油中).看参赛要求,需要将官网的git工程clone下来,在此基础上做修改后提交到自己的仓库中. 由于以前并没有使用过git,所以差了比较多的资料,做 ...
- SVN操作步骤
1.第一次检出 svn co svn://192.168.1.1:5555/MMM 2.代码更新 svn update 3.代码提交 svn add *.c svn commit -m "d ...
- linux crontab详解 php开发相关
vi vi /etc/crontab 注意不是这么直接干的! 下面是内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root ...
- WinDbg 之 SOS扩展命令
SOS.dll (SOS debugging extension) The SOS Debugging Extension (SOS.dll) helps you debug managed prog ...
- layui上传文件前端报404,实际文件已经上传成功
原因:上传回调的方法接收的参数应该是json格式的,之前返回的是String,所以一直走异常的方法 第一种 在后台上加上@ResponseBody 第二种 @ResponseBody @Request ...
- ext 的loadmask 与ajax的同步请求水火不容
由于ajax 的同步请求会有一段请求时间.有的短.有的长,对于短的我们还是能接受的,不过长的话就必须处理一下了, 就比如处于ext 4.2.0的框架下,需要一个遮掩的样式,框架是有自带的,loadma ...
- Redis的数据结构之哈希
存储Hash String key和String Value的Map容器 每一个Hash可以存储4294967295个键值对 存储Hash常用命令: 赋值 取值 删除 增加数字 判断字段是否存在 获取 ...