zoukankan      html  css  js  c++  java
  • ORM模型

    一、创建及映射(orm_intro_demo文件

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

    二、数据库的增删改查

    1. models.py 文件:
       1 from django.db import models
       2 
       3 class Book(models.Model):
       4     name = models.CharField(max_length=100,null=False)
       5     author = models.CharField(max_length=100,null=False)
       6     price = models.FloatField(default=0)
       7 
       8     def __str__(self):
       9         # 查找数据时以该方式进行打印输出: <Book:(name,author,peice)>
      10         return '<Book:({name},{author},{price})>'.format(name=self.name,author=self.author,price=self.price)
    2. views.py 文件的 index 函数对数据库进行修改:
       1 from django.shortcuts import render
       2 from django.http import HttpResponse
       3 from .models import Book
       4 
       5 def index(request):
       6     # 1、使用ORM添加一条数据到数据库中,运行一次添加一条数据;
       7     book = Book(name='西游记',author='吴承恩',price=100)
       8     book.save()
       9 
      10     # 2、查询:
      11     # 2.1、根据主键primary key进行查找
      12     book = Book.objects.get(pk=1)
      13     print(book)
      14     # 2.2、根据其他条件进行查找
      15     books = Book.objects.filter(name='西游记').first()
      16     print(books)
      17     #输出:<Book:(西游记,吴承恩,100.0)>
      18 
      19     # 3、删除数据
      20     book = Book.objects.get(pk=1)
      21     book.delete()
      22 
      23     # 4、修改数据
      24     book = Book.objects.get(pk=2)
      25     book.name = '三国演义'
      26     book.author = '罗贯中'
      27     book.save()
      28     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”参数,将刚生成的迁移脚本文件标记为已经完成,后可继续做其它映射。
  • 相关阅读:
    java 实现往oracle存储过程中传递array数组类型的参数
    Mybatis调用PostgreSQL存储过程实现数组入参传递
    数组做为参数传入Oracle存储过程操作数据库
    jdbcTemplate 调用存储过程。 入参 array 返回 cursor
    eclipse安装反编译插件
    eclipse安装JAVA反编译插件
    java怎样将一组对象传入Oracle存储过程
    Spring如何使用JdbcTemplate调用存储过程的三种情况
    Java_oracle超出打开游标的最大数的原因和解决方案
    windows+mysql集群搭建-三分钟搞定集群
  • 原文地址:https://www.cnblogs.com/liqiongming/p/10435709.html
Copyright © 2011-2022 走看看