zoukankan      html  css  js  c++  java
  • Django框架之ORM对表结构操作

    ORM的优点:(1)简单,不用自己写SQL语句

           (2)开发效率高

    ORM的缺点:对于不同的人写的代码,执行效率有差别

    ORM的对应关系:

      类  ----------》  数据表

      对象-----------》数据行

      属性-----------》字段

    ORM能做的事:

    (1)操作数据表 --》创建表/删除表/修改表

    (2)操作数据行 --》数据的增删查改

    但是ORM不能创建数据库,需要自己动手创建数据库

    使用Django中的ORM详细步骤:

    1.手动创建数据库

    2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪个数据库)

    3.Django框架中用pymysql代替默认的MySQLDB连接MySQL数据库

    4.在app下面的models.py文件中定义一个类,这个类必须继承models.Model

    5.执行两个命令

    (1)python3 manage.py makemigrations

    (2)python3 manage.py migrate

    具体实现如下:

    1.手动创建数据库

    2.在Django项目中设置连接数据库的相关配置(告诉Django连接哪个数据库)

    在项目同名文件夹中的settings.py文件中找"DATABASES"一个变量,配置如下:

    # 数据库相关配置
    DATABASES = {
        'default': {
            # 连接数据库类型
            'ENGINE': 'django.db.backends.mysql',
            # 连接数据库地址
            'HOST':'127.0.0.1',
            # 端口
            'PORT':3306,
            # 数据库名称
            'NAME':'oldboy',
            # 用户
            'USER':'root',
            # 密码
            'PASSWORD':'123456',
        }
    }

     3.Django框架中用pymysql代替默认的MySQLDB连接MySQL数据库

    在项目同名文件夹的__init__.py中添加如下:

    import pymysql
    # 告诉Django用pymysql来代替默认的MySQLDB,因为Mysqldb是支持python2,不支持python3
    pymysql.install_as_MySQLdb()

    4.在app下面的models.py文件中定义一个类,这个类必须继承models.Model

    ORM相关的只能写在这个文件里,写到别的文件里Django找不到

    from django.db import models
    
    # Create your models here.
    
    class UserInfo(models.Model):
        id=models.AutoField(primary_key=True) # 创建一个自增的主键字段
        name=models.CharField(null=False,max_length=20) # 创建一个varchar类型的不能为空的字段,其中最大长度必须设置

    5.执行两个命令

    (1)python manage.py makemigrations

    (2)python manage.py migrate

    数据库中创建表的结果如下:

    命令1:python manage.py makemigrations  将models.py里面的改动记录到对应模块里的migrations文件夹下面,例如:app02/migrations下

    命令2:python manage.py migrate  把改动翻译成SQL语句去数据库执行

     通过以上步骤,实现了通过ORM对表的创建,如果修改表结构的话,将对应表的类进行修改,重新运行两个命令即可。

  • 相关阅读:
    响应式布局和BootStrap 全局CSS样式
    javascript中的undefined与null的区别
    before(),after(),prepend(),append()等新DOM方法简介
    解决文字和text-decoration:underline下划线重叠问题
    CSS3 linear-gradient线性渐变实现虚线等简单实用图形
    用Javascript获取页面元素的位置
    rem、px、em(手机端h5页面屏幕适配的几种方法)
    用flex和rem实现移动端页面
    HTML5新增的form属性简介(转载至张鑫旭)
    vue实现图片放大
  • 原文地址:https://www.cnblogs.com/fjiqiang/p/10863778.html
Copyright © 2011-2022 走看看