- 数据库:简介略去了,在项目操作中应用的比较多的是PHPstudy(含有多个版本的数据库)和SQLyog(数据库的图形化工具),
准备工作: - 1.
pip install mysqlclient
mysqlclient是一个引擎 - 2.开启phpstudy和sqlyog
ORM简介:
ORM,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。
ORM优点
ORM的使用可以提高开发效率,在使用中通过ORM的方式操作数据库可以不必写SQL语句专注于写数据库的逻辑。在实际的开发中,越是大的项目开发,使用ORM操作的好处越容易显现,比如在开发中切换数据库,查看在各种数据库中项目的运行状态,就需要切换数据库,如果应用原生的sql语句,就需要换很多的语句,大量的语句,对于ORM,只需要切换数据库就可以了,因为ORM方式不关心底层的sql语句。
ORM的方式对性能的损耗小,可以匹配流行的多种数据库,开发起来灵活。
ORM操作数据库的流程
- 1.settings配置数据库,位置在databases字典内,配置项包括引擎,数据库名称,地址,端口号,用户名,密码,这些需要自己写键和键值的
- 2.models:在一个APP内部的models内创建模型
- 3.在settings内注册APP,在INSTALLED_APPS内注册(添加)
- 4.生成迁移文件:
python manage.py makemigrations
- 5.迁移数据库:
python manage.py migrate
- 6.可以在sqlyog中看到数据库了
- 7.在views内定义相关的增删改查操作
ORM具体操作代码展示 :
- settings:数据库配置与注册APP,位置:DATABASES:
DATABASES = {
'default': {
# 数据库引擎
'ENGINE': 'django.db.backends.mysql',
# 数据库的名称
'NAME': 'django_db1',
# 地址
'HOST': '127.0.0.1',
# 端口号
'PORT': 3306,
# 用户名
'USER': 'root',
# 密码
'PASSWORD': 'root'
}
}
INSTALLED_APPS:
front和book是我们注册的APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'front',
'book'
]
-
注:启动时出现错误:
No installed app with label 'admin'
,原因是此时没有安装mysqlclient,如果此时安装了pymysql的话,也有可能出错的,建议卸掉。这也是每个项目一个虚拟环境的好处。 -
在APP内的models写入数据库模板:
from django.db import models
from datetime import datetime
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20,null=False)
author = models.CharField(max_length=20,null=False)
pub_time = models.DateTimeField(default=datetime.now)
price = models.FloatField(default=0)
-
在命令行终端,进入到项目所在的路径,然后执行命令python manage.py makemigrations来生成迁移脚本文件。(如果不确定项目的路径,你就要确认下该文件夹内有没有manage.py文件,没有怎么样用python运行呢?)
-
同样在命令行中,执行命令python manage.py migrate来将迁移脚本文件映射到数据库中。
-
通过sqlyog查看相应的数据库:
在django里,会生成一个默认的数据表名字为蓝图名_model名小写的表格,至此,数据库迁移过程完成,进行ORM的操作的前戏做足了,后面进行相关的增删改查操作 -
ORM操作之增删改查:
为了增删改查方便,我选择一个更简洁一点的数据表
新建book APP,在项目url中添加蓝图book的路由,在installAPP注册book,在book中的models内新建模板,生成迁移脚本文件和进行数据迁移,完成这些操作之后可以安心进行下面的增删改查操作了。
在models内定义了数据库模板,
from django.db import models
# Create your models here.
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
author = models.CharField(max_length=20,null=False)
price = models.FloatField(default=0)
def __str__(self):
return 'Book(name:%s, author:%s, price:%s)' % (self.name, self.author, self.price)
这里只是定义了一个类,
从views视图定义相关的视图和相关操作:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Book
from django.db.models.base import ModelBase
# Create your views here.
def index(request):
return HttpResponse('图书馆首页')
# 增
def add_book(request):
book = Book(name='连城诀',author='金庸',price='88.8')
print(book)
print(type(Book))
book.save()
return HttpResponse('添加成功')
将add_book添加到book.urls
path('add/',views.add_book,name='addbook'),
打开路由:
http://127.0.0.1:8000/book/add/
此时可以看到添加成功,查看数据库可以看到新增了此条数据
操作三次,(修改name)我新增3条数据,飞狐外传,雪山飞狐和连城诀,
add操作完成,与之类似,后面的实验都是这样,添加新的操作就要添加新的路由,每一个操作占用一个路由,进行操作要打开路由,所以后面只写相关代码。
- 查询
# 查
def find_book(request):
# 根据主键来查询
# book = Book.objects.get(id=1)
# book = Book.objects.get(pk=1)
# 查询所有
# books = Book.objects.all()
# for book in books:
# print(book)
# 过滤条件来查
#book = Book.objects.filter(name='连城诀')
book = Book.objects.filter(pk=3)
print(book)
return HttpResponse('查询成功')
这里的查询分为三种:按照主键查询,查询所有和过滤条件查询,这里的查询全部完成了,
至于连城诀这个的查询就纯属偏爱了,很喜欢这部金庸小说中的另类,武侠里带了很多黑暗的东西,描写了诸多的恶人,其他小说里的主要人物还是善良的居多,这里,除了主人公狄云,丁典,其他人基本都是恶人,徒弟杀师傅,师兄弟相残,丈夫杀妻子,师傅欺骗徒弟等等,反而血刀老祖还真没跟自己人玩这个,他和所谓的名门正派打架那可真算是“光明磊落”了,反观正方代表“落花流水”剩下来的花铁干(六老师演绎的可太经典了)值得一看。其实吧,我总有一种我长得像吴樾的感觉,不知道是不是我瘦下来就真的像了,所以也喜欢这部剧了。
闲篇别看,想写了随便写写
- 修改
def update_book(request):
book = Book.objects.get(id=1)
book.name = '天龙八部'
book.save()
return HttpResponse('修改成功')
- 删除:
def delete_book(request):
# 删除的前提是要查询出来
book = Book.objects.get(id=1)
book.delete()
return HttpResponse('删除成功')
但是在平时的操作中不进行此类删除,而是设置一个is_delete 字段,为这个值置0或者1,现在这样的删除是危险的
至此,增删改查全部试验完毕,