Django-Model层ORM(五)

该博客主要介绍Django中数据库的配置与单表操作。包括在setting.py全局配置文件中配置sqlite3和mysql数据库,通过class创建数据库表,还阐述了单表的添加、修改、删除操作方法,以及查看SQL日志的配置方法,同时记录了使用mysql时遇到的报错及解决方案。

目录

一,数据库配置 setting.py全局配置文件中:

默认: sqlite3数据库

通过class创建一张表

二,使用mysql数据库,通过class创建数据库表

三,单表操作

添加操作一 ,实例化book对象调用save()函数:

 添加操作二,直接调用Book.objects.create()函数

修改操作一,filter()查找对象,update(),修改属性

修改操作二,调用get()查询到book对象,修改属性,调用save()

删除操作,调用get()查询到book对象,删除,

四,查看sql日志

配置文件添加如下即可:


一,数据库配置 setting.py全局配置文件中:

默认: sqlite3数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }

}

通过class创建一张表

在自己的应用的models.py中添加如下:

from django.db import models

# Create your models here.


class Book(models.Model):
    name = models.CharField(max_length=20)
    price = models.FloatField()
    pub_date = models.DateField()
    # age = models.IntegerField()

在终端执行俩条命令即可创建一张 应用名+book 的数据库:

python manage.py makemigrations

python manage.py migrate
 

二,使用mysql数据库,通过class创建数据库表

setting.py全局配置如下;

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'books',  # 数据库名称
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456',  # 数据库密码
        'HOST': '127.0.0.1',  # 数据库主机
        'POST': '3306',  # 数据库端口

    }
}

执行命令:python manage.py makemigrations 报错:

错误显示: 没有mysqldb模块.

在全局__init__.py文件中添加如下: 驱动使用mysql

import pymysql
pymysql.install_as_MySQLdb()

 再次执行:报错mysqlclient 1.3.13 or newer is required; you have 0.9.3.

错误原因:大致是mysqlclient 版本太低, 

解决方案:进入路径D:\python\workspace\Django_ORM\venv\Lib\site-packages\django\db\backends\mysql ,即项目引用下django安装目录下的mysql。找到base.py.注释掉 34 - 36 行.

再次执行:报错:AttributeError: 'str' object has no attribute 'decode'
 解决方案:同上,在同一目录下找到operations.py,修改146行,原来是decode的方法,将它改为encode

再次执行-成功创建出数据库表 如下;

三,单表操作

添加操作一 ,实例化book对象调用save()函数:

from django.shortcuts import render, HttpResponse
from app01.models import *
# Create your views here.


def index(request):
    return render(request, 'index.html')


def addbook(request):
    # 实例化书对象
    book = Book(name='bython基础', price=99, author='刘备', pub_date='2017-12-12')
    book.save()

    return HttpResponse('添加成功')

 添加操作二,直接调用Book.objects.create()函数

from django.shortcuts import render, HttpResponse
from app01.models import *
# Create your views here.


def index(request):
    return render(request, 'index.html')


def addbook(request):
    # 实例化书对象
    # book = Book(name='bython基础', price=99, author='刘备', pub_date='2017-12-12')
    # book.save()
    Book.objects.create(name='java基础', price=999, author='张飞', pub_date='2018-11-11')
    return HttpResponse('添加成功')

修改操作一,filter()查找对象,update(),修改属性

from django.shortcuts import render, HttpResponse
from app01.models import *
# Create your views here.


def index(request):
    return render(request, 'index.html')


def addbook(request):
    # 实例化书对象
    # book = Book(name='bython基础', price=99, author='刘备', pub_date='2017-12-12')
    # book.save()
    Book.objects.create(name='java基础', price=999, author='张飞', pub_date='2018-11-11')
    return HttpResponse('添加成功')


def updatebook(request):
    Book.objects.filter(author='张飞').update(price=199)
    return HttpResponse('修改成功')

修改操作二,调用get()查询到book对象,修改属性,调用save()

def updatebook(request):
    # Book.objects.filter(author='张飞').update(price=199)
    book = Book.objects.get(id=2)
    book.price = 299
    book.save()
    return HttpResponse('修改成功')

删除操作,调用get()查询到book对象,删除,

from django.shortcuts import render, HttpResponse
from app01.models import *
# Create your views here.


def index(request):
    return render(request, 'index.html')


def addbook(request):
    # 实例化书对象
    # book = Book(name='bython基础', price=99, author='刘备', pub_date='2017-12-12')
    # book.save()
    Book.objects.create(name='java基础', price=999, author='张飞', pub_date='2018-11-11')
    return HttpResponse('添加成功')


def updatebook(request):
    Book.objects.filter(author='张飞').update(price=199)
    # book = Book.objects.get(id=2)
    # book.price = 299
    # book.save()
    return HttpResponse('修改成功')


def deletebool(request):
    Book.objects.get(author='张飞').delete()
    return HttpResponse('删除成功')

四,查看sql日志

配置文件添加如下即可:

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

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值