目录
添加操作二,直接调用Book.objects.create()函数
修改操作一,filter()查找对象,update(),修改属性
修改操作二,调用get()查询到book对象,修改属性,调用save()
一,数据库配置 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',
},
}
}
该博客主要介绍Django中数据库的配置与单表操作。包括在setting.py全局配置文件中配置sqlite3和mysql数据库,通过class创建数据库表,还阐述了单表的添加、修改、删除操作方法,以及查看SQL日志的配置方法,同时记录了使用mysql时遇到的报错及解决方案。
520

被折叠的 条评论
为什么被折叠?



