当前位置: 代码网 > it编程>前端脚本>Python > ORM基础

ORM基础

2024年05月21日 Python 我要评论
ORM(Object Relational Mapping)是对象-关系-映射的简称。 ORM是MVC框架中的重要的部分。它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量 在ORM中,有三种对应关系: 类对应 ...

orm(object relational mapping)是对象-关系-映射的简称。

orm是mvc框架中的重要的部分。它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量

在orm中,有三种对应关系:

  • 类对应表
  • 类属性对应表字段
  • 类对象对应表记录

如何在django中使用orm

  • 1.创建对象映射关系,即创建模型类,其实就是在app下的models.py中,以类和属性的形式定义表的字段
    models.py

    from django.db import models
    
    class user(models.model):
          username = models.charfield(max_length=32, verbose_name='用户名')
           
         # 当输出对象时候自动输出相应对象(记录)的用户名【纯是输出对象为了好看哈哈哈】
          def __str__(self):
               return self.username 
    
  • 2.配置数据库连接,并且有了关系映射关系,这个时候就可以通过命令在数据库中生成具体表了
    db.sqlite3配置
    dj.sqlite3是django中的集成数据库,在settings中配置好的,适合测试环境用【适用于数据量小的时候】

    databases = {
          'default': {
              'engine': 'django.db.backends.sqlite3',
              'name': base_dir / 'db.sqlite3',
          }
      }
    

    mysql配置
    首先安装用于连接mysql的模块

    pip install pymysql
    

    然后添加配置,在与项目同名目录中的__init__.py添加以下代码

    import pymysql
    pymysql.install_as_mysqldb()
    

    接下来,就需要手动在mysql中手动创建数据库啦
    然后,连接mysql还需要再django中的settings中配置一下

    databases = {
        'default': {
            'engine': 'django.db.backends.mysql',
            'name': 'day07',    		#你的数据库名称
            'user': 'root',   		#你的数据库用户名
            'password': '123', 	#你的数据库密码
            'host': '', 			#你的数据库主机,留空默认为localhost
            'port': '3306', 		#你的数据库端口
        }
    } 
    
    

    由于orm会将orm语句转换成原生sql语句,可能有些sql不符合我们的预期,所以这个日志配置,用来查看 orm到底将语句转换成什么,方便我们排查

    如果想查看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',
             },
       }
    }
    

    也可以为每个app单独配置数据库,可以在settings中配置

    databases = {
      'default': {
          'engine': 'django.db.backends.mysql',
          'name':'bms',           # 要连接的数据库,连接前需要创建好
          'user':'root',        # 连接数据库的用户名
          'password':'',        # 连接数据库的密码
          'host':'127.0.0.1',       # 连接主机,默认本级
          'port':3306            #  端口 默认3306
      },
      'app01': { #可以为每个app都配置自己的数据,并且数据库还可以指定别的,也就是不一定就是mysql,也可以指定sqlite等其他的数据库
          'engine': 'django.db.backends.mysql',
          'name':'bms',           # 要连接的数据库,连接前需要创建好
          'user':'root',        # 连接数据库的用户名
          'password':'',        # 连接数据库的密码
          'host':'127.0.0.1',       # 连接主机,默认本级
          'port':3306            #  端口 默认3306
      }
    

}

  • 3.数据库迁移,只需要执行两个命令就可以
     python manage.py makemigrations   # 用来读取你在modesl.py中的类和属性,创建数据库的映射关系【生成文件】
     python manage.py migrate  # 读取映射关系文件,在数据库中生成相应的表
    
    上述命令会将所有的app(settings中的installed_apps中的app)中的models.py的映射类,真正的在数 据库中创建相应的表。但是也可能有失败的时候,那么我们就要强制执行数据库迁移命令:
    python manage.py migrate your_app_name --database your_app_name 
    
    上述操作,仅适用于连接mysql
    注意点
    • django为了区分某个表属于某个应用,创建的表都是以应用名加下划线加表名的形式,如上述的userinfo表,django会创建成app01_userinfo
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com