Django ORM 操作数据库

一、Django ORM 操作数据库的概念

Django有一个强大的功能是它的对象关系映射Object-Relational Mapper(ORM),它允许你就像使用 SQL 一样去和你的数据库交互。事实上,Django 的 ORM 就是创建 SQL 去查询和操作数据库的一个利用 Python 类去操作数据库的方式。

二、Django ORM 操作数据库的方法

我们的程序涉及到数据库相关操作时,常用的方法:

  • 创建数据库,设计表结构和字段
  • 使用 MySQLdb 来连接数据库,并编写数据访问层代码
  • 业务逻辑层去调用数据访问层执行数据库操作

ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--code first)

ORM:Object Relational Mapping(关系对象映射)

类名对应------》数据库中的表名

类属性对应---------》数据库里的字段

类实例对应---------》数据库表里的一行数据

obj.id  obj.name.....类实例对象的属性

Django orm的优势:

Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可;

2.1、Django连接MySQL

1、创建数据库 (注意设置 数据的字符编码)

由于Django自带的orm是data_first类型的ORM,使用前必须先创建数据库

create database django01 default charset=utf8 collate utf8_general_ci;
2、修改project中的settings.py文件中设置  连接 MySQL数据库(Django默认使用的是sqllite数据库)
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'django01',
    'USER': 'root',
    'PASSWORD': '123123',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    }
}

扩展:查看orm操作执行的原生SQL语句,在project中的settings.py文件增加

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

3、修改project 中的__init__.py 文件设置 Django默认连接MySQL的方式

import pymysql
pymysql.install_as_MySQLdb()

4、settings.py文件注册APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
   
]

5、进行数据迁移

5.1、在winds cmd或者Linux shell的项目的manage.py目录下执行

python manage.py makemigrations  # 将python类迁移为sql语句,并保存在 makemigrations 文件中

python manage.py migrate # 执行迁移的sql语句,将数据写入数据库

扩展:修改表之后常见报错

这个报错:因为表创建好之后,新增字段没有设置默认值,或者原来表中字段设置了不能为空参数,修改后的表结构和目前的数据冲突导致;

6、modles.py创建表

6.1、表的基本操作

from django.db import models

class UserInfo(models.Model):  # 必须继承models.Model
    # 不写则,django默认创建ID列,自增,主键
    # 用户名列,字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

6.1.1、常用字段

AutoField 

 

一个能够根据可用ID自增的 IntegerField 

BooleanField

 

一个真/假(true/false)字段

CharField

 (max_length)

一个字符串字段,适用于中小长度的字符串。对于长段的文字,请使用 TextField

CommaSeparatedIntegerField

 (max_length)

一个用逗号分隔开的整数字段

DateField

([auto_now], [auto_now_add])

日期字段

DateTimeField

 

时间日期字段,接受跟 DateField 一样的额外选项

EmailField

 

一个能检查值是否是有效的电子邮件地址的 CharField 

FileField 

(upload_to)

一个文件上传字段

FilePathField

(path,[match],[recursive])

一个拥有若干可选项的字段,选项被限定为文件系统中某个目录下的文件名

FloatField

(max_digits,decimal_places)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值