ORM基础

打印 上一主题 下一主题

主题 914|帖子 914|积分 2742

ORM(Object Relational Mapping)是对象-关系-映射的简称。
ORM是MVC框架中的重要的部门。它实现了数据模子与数据库的解耦,即数据模子的设计不必要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开辟职员的工作量
在ORM中,有三种对应关系:

  • 类对应表
  • 类属性对应表字段
  • 类对象对应表记录
怎样在Django中利用ORM

  • 1.创建对象映射关系,即创建模子类,其实就是在app下的models.py中,以类和属性的形式定义表的字段
    models.py
    1. from django.db import models
    2. class User(models.Model):
    3.       username = models.CharField(max_length=32, verbose_name='用户名')
    4.       
    5.      # 当输出对象时候自动输出相应对象(记录)的用户名【纯是输出对象为了好看哈哈哈】
    6.       def __str__(self):
    7.            return self.username
    复制代码
  • 2.配置数据库毗连,并且有了关系映射关系,这个时候就可以通过命令在数据库中生成具体表了
    db.sqlite3配置
    dj.sqlite3是django中的集成数据库,在settings中配置好的,适合测试情况用【实用于数据量小的时候】
    1. DATABASES = {
    2.       'default': {
    3.           'ENGINE': 'django.db.backends.sqlite3',
    4.           'NAME': BASE_DIR / 'db.sqlite3',
    5.       }
    6.   }
    复制代码
    mysql配置
    首先安装用于毗连mysql的模块
    1. pip install pymysql
    复制代码
    然后添加配置,在与项目同名目录中的__init__.py添加以下代码
    1. import pymysql
    2. pymysql.install_as_MySQLdb()
    复制代码
    接下来,就必要手动在mysql中手动创建数据库啦
    然后,毗连mysql还必要再Django中的settings中配置一下
    1. DATABASES = {
    2.     'default': {
    3.         'ENGINE': 'django.db.backends.mysql',
    4.         'NAME': 'day07',                    #你的数据库名称
    5.         'USER': 'root',                   #你的数据库用户名
    6.         'PASSWORD': '123',         #你的数据库密码
    7.         'HOST': '',                         #你的数据库主机,留空默认为localhost
    8.         'PORT': '3306',                 #你的数据库端口
    9.     }
    10. }
    复制代码
    由于ORM会将ORM语句转换成原生sql语句,可能有些SQL不符合我们的预期,所以这个日记配置,用来查看    ORM到底将语句转换成什么,方便我们排查
    如果想查看ORM转换为的sql语句,可以在settings中配置
    1. LOGGING = {
    2. 'version': 1,
    3. 'disable_existing_loggers': False,
    4. 'handlers': {
    5.      'console':{
    6.          'level':'DEBUG',
    7.          'class':'logging.StreamHandler',
    8.      },
    9. },
    10. 'loggers': {
    11.      'django.db.backends': {
    12.          'handlers': ['console'],
    13.          'propagate': True,
    14.          'level':'DEBUG',
    15.          },
    16.    }
    17. }
    复制代码
    也可以为每个app单独配置数据库,可以在settings中配置
    1. DATABASES = {
    2.   'default': {
    3.       'ENGINE': 'django.db.backends.mysql',
    4.       'NAME':'bms',           # 要连接的数据库,连接前需要创建好
    5.       'USER':'root',        # 连接数据库的用户名
    6.       'PASSWORD':'',        # 连接数据库的密码
    7.       'HOST':'127.0.0.1',       # 连接主机,默认本级
    8.       'PORT':3306            #  端口 默认3306
    9.   },
    10.   'app01': { #可以为每个app都配置自己的数据,并且数据库还可以指定别的,也就是不一定就是mysql,也可以指定sqlite等其他的数据库
    11.       'ENGINE': 'django.db.backends.mysql',
    12.       'NAME':'bms',           # 要连接的数据库,连接前需要创建好
    13.       'USER':'root',        # 连接数据库的用户名
    14.       'PASSWORD':'',        # 连接数据库的密码
    15.       'HOST':'127.0.0.1',       # 连接主机,默认本级
    16.       'PORT':3306            #  端口 默认3306
    17.   }
    复制代码
}

  • 3.数据库迁徙,只必要实行两个命令就可以
    1. python manage.py makemigrations   # 用来读取你在modesl.py中的类和属性,创建数据库的映射关系【生成文件】
    2. python manage.py migrate  # 读取映射关系文件,在数据库中生成相应的表
    复制代码
    上述命令会将所有的APP(settings中的INSTALLED_APPS中的app)中的models.py的映射类,真正的在数  据库中创建相应的表。但是也可能有失败的时候,那么我们就要逼迫实行数据库迁徙命令:
    1. python manage.py migrate your_app_name --database your_app_name
    复制代码
    上述操纵,仅实用于毗连mysql
    注意点

    • Django为了区分某个表属于某个应用,创建的表都是以应用名加下划线加表名的形式,如上述的UserInfo表,Django会创建成app01_userinfo


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表