zoukankan      html  css  js  c++  java
  • Django orm

    ORM简介:

    • MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。

    • ORM是“对象-关系-映射”的简称。

    翻译成相应的sql语句:

    • 缺点: 消耗一定的时间

    • 优点:可以更换引擎来翻译成不同的数据库语法

    单表操作

    • ORM不能直接创建数据库,只能创建表

    1. 创建模型

    在models.py中创建模型:

    from django.db import models
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        state = models.BooleanField()
        pub_date = models.DateField()
        price = models.DecimalField(max_digits=8, decimal_places=2)
        publish = models.CharField(max_length=32)

    每个字段有一些特有的参数,还有一些适用于所有字段的通用参数:

    2.setting配置

    若想将模型转为mysql数据库中的表,需要在settings中配置:

    DATABASES = {
        'default':{
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'db1',              # 要连接的数据库名称
            'USER': 'root',             # 连接数据库的用户名
            'PASSWORD':'',              # 连接数据库的密码
            'HOST': '127.0.0.1',        # 连接主机, 默认本地
            'POST': 3306                # 端口 默认 3306
        }
    }
    1. NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库的用户名和密码。设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的init,在里面写入:

      配置pymyqdb:(这个是默认py2中的链接方式)

      migrations——> __init__.py

      import pymysql
      pymysql.install_as_MySQLdb()
    1. 确保配置文件中的INSTALLED_APPS中写入我们创建的app名称

    1. 如果报错如下:

    django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

    MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:

    通过查找路径Python36-32Libsite-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql

    这个路径里的文件把目标注释掉就可以了:

    if version < (1, 3, 3):
         raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
    1. 如果想打印orm转换过程中的SQL,需要在settings中进行如下配置:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level': 'DEBUG',
            },

    结果: 会生成django自带表(settings中的INSTALLED_APPS)

    如果不加主键,django会默认加名叫id的主键

    数据库迁移

    • django会把settings中的INSTALLED_APPS中的每一个应用中的modeles类创建成数据库中的表

    创建数据库(models)

    • python manage.py makemigrations

    python manage.py makemigrations
    python manage.py migrate 

    与SQL的映射关系

    •        类 ———— 表 名

    • 类属性 ———— 表字段

    • 类对象 ———— 表记录

  • 相关阅读:
    VMware克隆虚拟机
    3种Redis分布式锁的对比
    高并发下缓存与数据库双写不一致解决方案
    30分钟Maven入门到精通
    Linux安装rabbitmq (解决guest无法登陆问题)
    RocketMQ高性能原理(pushConsumer,CommitLog,ZeroCopy)
    XA 分布式事务原理(转)
    SpringBoot学习(八)RestTemplate/WebClient 调用REST服务、Validation校验和发邮件
    @Valid和@Validated的总结区分(转)
    Dubbo 同步调用原理(转)
  • 原文地址:https://www.cnblogs.com/jiumo/p/9856741.html
Copyright © 2011-2022 走看看