django 模型设置与简单应用-ORM
1、django 模型设置与简单应用
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django 为这些数据库提供了统一的调用 API。 我们可以根据自己业务需求选择不同的数据库。
MySQL 是 Web 应用中最常用的数据库。如果你没安装 mysql 驱动,可以使用如下命令安装。
pip install pymysql
Django ORM
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的 数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

使用 ORM 的好处:
- 提高开发效率。
 - 不同数据库可以平滑切换。
 
使用 ORM 的缺点:
- ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
 - 长期写 ORM 代码,会降低编写 SQL 语句的能力。
 
ORM 解析过程:
- ORM 会将 Python 代码转成为 SQL 语句。
 - SQL 语句通过 pymysql 传送到数据库服务端。
 - 在数据库中执行 SQL 语句并将结果返回。
 
ORM 对应关系表:

1)数据库配置
首先创建一个app应用
django-admin manage.py startapp timeInfo
创建 MySQL 数据库( ORM 无法操作到数据库级别,只能操作到数据表)语法:
create database 数据库名称 default charset=utf8; # 防止编码问题,指定为 utf8
例如 创建一个名为 runoob 数据库,编码指定为 utf8:
create database runoob default charset=utf8;
settings.py: 文件代码修改:


代码
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'bigdata', # 数据库名称 'HOST': '172.16.6.102',# 数据库地址,本机 ip 地址 127.0.0.1 也可以是localhost 'PORT': 3306,# 端口 'USER': 'root',# 数据库用户名 'PASSWORD': 'root',# 数据库密码 } }
上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一 设置,与 MySQL 中相应的数据库和用户连接起来。
接下来,告诉 Django 使用 pymysql 模块连接 mysql 数据库:
# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置

import pymysql pymysql.install_as_MySQLdb()
修改 TestModel/models.py 文件

代码如下
from django.db import models # Create your models here. class Events(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=255) pubDate = models.BigIntegerField() sourceUrl = models.CharField(max_length=255)
在命令行中运行:
$ python3 manage.py makemigrations TestModel # 让 Django 记录模型的改变,生产对应的 sql 语句
$ python3 manage.py migrate # 将所有的模型同步到数据库
$ python3 manage.py migrate TestModel #将特定的模型同步到数据库

看到几行 "Creating table…" Creating table…"Creating table…" 的字样,你的数据表就创建好了。
Creating tables ...
……
Creating table TestModel_test #我们自定义的表
……
数据库操作
接下来我们在项目目录中添加 testdb.py 文件(下面介绍),并修改 urls.py:
from django.urls import path from . import views,testdb urlpatterns = [ path('runoob/', views.runoob), path('testdb/', testdb.testdb), ]

增

查


改

删

完整代码
from django.shortcuts import render from django.http import HttpResponse def index(request): context = {} context['weather'] = '下午出太阳' return render(request, 'index.html', context=context) from timeInfo.models import Book #增加 def insertbook(request): book = Book(id=1001, title="霸道总裁爱上python", price=999.89, publish="宇宙出版社", pubdate="2000-01-01") book.save() return HttpResponse("插入成功") #查询 def searchbook(request): #1、查询多条数据 # 通过 objects 这个模型管理器的 all()获得所有数据行,相当于 SQL 中的 SELECT * FROM booklist = Book.objects.all() bookinfo = [] for i in booklist: bookinfo.append(i.id) bookinfo.append(i.title) bookinfo.append(i.price) bookinfo.append(i.publish) bookinfo.append(i.pubdate) print(bookinfo) #2、查询单条数据 book = Book.objects.get() print(booklist.id,booklist.title,booklist.price,booklist.publish,booklist.pubdate) #3、查询指定条件数据 # 获取单个对象 book = Book.objects.get(id=1001) print(booklist.id, booklist.title, booklist.price, booklist.publish, booklist.pubdate) # 4、过滤filter 相当于 SQL 中的 WHERE,可设置条件过滤结果 #过滤单条数据 book = Book.objects.filter(id=1001) # 数据排序 Book.objects.order_by('name') # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2; bookli = Book.objects.order_by('name')[0:2] # 连锁使用 s = Book.objects.filter(id=1001).order_by('name') for i in bookli: bookinfo.append(i.id) bookinfo.append(i.title) bookinfo.append(i.price) bookinfo.append(i.publish) bookinfo.append(i.pubdate) print(bookinfo) return HttpResponse("查询成功") #修改 def makebook(request): book = Book.objects.get(id=1001) book.title = "霸道总裁爱上linux" book.save() return HttpResponse("修改成功") #删除 def deletebook(request): #1、删除一条 book = Book.objects.get(title="霸道总裁爱上linux") # 删除 title="霸道总裁爱上linux" 的数据也可以写成 id=1001 # 即book = Book.objects.get(id=1001) book.delete() #2、删除所有数据 Book.objects.all().delete()

                
            
        
浙公网安备 33010602011771号