Django 对各种数据库提供了很好的支持,包括PostgreSQL,MySQL,SQLite,Oracle。Django为这些数据库提供了统一的调用API。
mysql驱动,可以执行以下命令安装:
python
pip3 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 对应关系表:
python
ORM 数据库
Models类 -> 数据表
对象实例 - > 一条记录
属性 -> 字段
数据库配置
首先我们在mysql数据库创建test数据库,编码指定为utf8;
create database test default charset=utf8;
settings.py文件代码:
python
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #数据库引擎
'NAME': 'test2', #数据库名称
'HOST':'127.0.0.1', #数据库地址
'PORT':'3306', #数据库用户名
'USER':'root',
'PASSWORD':'root' #数据库密码
}
}
接下来,告诉Django使用pymysql模块连接mysql数据库。
python
#在与settings.py 同级目录下的__init__.py中引入模块和进行配置。
import pymysql
pymysql.install_as_MySQLdb()
定义模型
创建APP
Django 规定,如果要使用模型,必须要创建一个app,我们使用以下TestModel的app:
python
django-admin startapp book
我们修改TestModel/models.py文件,代码如下:
python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'book',
]
在Terminal运行命令:
py manage.py migrate #创建表结构
py manage.py makemigrations book
py manage.py migrate book #创建表结构
数据库操作
接下来在项目中添加testdb.py文件,并且修改urls.py:
*
###### 添加数据
添加数据需要先创建对象,然后再执行save函数,相当于SQL中的INSERT;
```python
from django.http import HttpResponse
from book.models import Test
#数据库操作
def testdb(request):
test1 = Test(name='zulnger')
test1.save()
return HttpResponse("<p>数据添加成功!</p>")
```
###### 获取数据
Django 提供了很多方式来获取数据库的内容,如下所示:
```python
#数据库操作
def testdb(request):
#初始化
response = ""
response1 = " "
#通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
listTest = Test.objects.all()
#filter相当于SQL中的WHERE,可设置条件过滤结果。
response2 = Test.objects.filter(id=1)
#获取单个对象
response3 = Test.objects.get(id=1)
#限制返回的数据 相当于SQL中的OFFSET 0 LIMIT 2;
Test.objects.order_by('name')[0:2]
#数据排序
Test.objects.order_by("id")
#上面的方法可以连锁使用
Test.objects.filter(name='zulnger').order_by("id")
#输出所有数据
for var in listTest:
response1 += var.name +""
response = response1
return HttpResponse("<p>"+response+"</p>")
```
###### 更新数据
修改数据可以使用save()或update():
```python
#数据库操作
def testdb(request):
#修改其中一个id=1的那么字段,再save,相当于SQL中UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
#另外一种方式
#Test.objects.filter(id=1).update(name='Google')
#修改所有的列
#Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</P")
```
###### 删除数据
删除数据库中的对象只需调用该对象的\*\*dalete()\*\*方法即可:
```python
#数据库操作
def testdb(request):
#删除id=1的数据:
test1 = Test.objects.get(id=1)
test1.delete()
#另外一种方式
#Test.objects.filter().delete()
#删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")
```