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的映射关系

  •        类 ———— 表 名

  • 类属性 ———— 表字段

  • 类对象 ———— 表记录

原文地址:https://www.cnblogs.com/jiumo/p/9856741.html