文章目录
- 连接Mysql数据库
- 安装Mysql驱动
- 配置数据库信息
- 明确连接驱动
- 定义模型
- 在模型下的models.py中定义表对象
- 在settings.py 中找到INSTALLED_APPS添加创建的模型
- 测试
- testdb.py中写增删改查操作
- urls.py添加请求路径
- 启动项目进行测试
连接Mysql数据库
安装Mysql驱动
pip install pymysql
Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
配置数据库信息
在settings.py中找到DATABASES定义要连接的数据库信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'rcdb',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'youMysqlUser',
'PASSWORD': 'root'
}
}
明确连接驱动
在settings.py同级中的__init__.py中进行配置
import pymysql
pymysql.install_as_MySQLdb()
定义模型
Django使用模型时必须新建一个app,使用下列命令创建:
django-admin startapp TestModel
在模型下的models.py中定义表对象
如果要连接多个表
from django.db import models
# Create your models here.
class Test(models.Model):
name = models.CharField(max_length=20)
class Book(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=5,decimal_places=2)
publish = models.CharField(max_length=32)
pub_date = models.DateField()
authors = models.ManyToManyField("Author")
class Publish(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=64)
email = models.EmailField()
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.SmallIntegerField()
au_detail = models.OneToOneField("AuthorDetail",on_delete=models.CASCADE)
class AuthorDetail(models.Model):
gender_choices = ((0,"女"),(1,"男"),(2,"保密"),)
gender = models.SmallIntegerField(choices=gender_choices)
tel = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
birthday = models.DateField()
以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
在settings.py 中找到INSTALLED_APPS添加创建的模型
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel', # 本次新创建模型
]
以上步骤便定义好了项目的数据模型,可在项目中创建testdb.py中进行测试
测试
testdb.py中写增删改查操作
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作-保存
def testdb(request):
test1 = Test(name='菜鸟教程')
test1.save()
return HttpResponse("<p>数据库添加成功</p>")
# 数据库操作-查询
def testdb_select(request):
# 初始化
response = ""
response1 = ""
# 通过objects这个模型管理器的all获得所有数据行,相当于SQL中的SELECT * FROM
listTest = Test.objects.all()
# filter相当于SQL中的WHERE,可设置条件过滤结果
response2 = Test.objects.filter(id=1)
# 获取单个对象
respone3 = Test.objects.get(id=1)
# 限制返回的数据 相当于SQL中的 OFFSET 0 LIMIT 2;
Test.objects.order_by("id")
# 上面的方法可以连锁使用
Test.objects.filter(name="菜鸟教程").order_by("id")
# 输出所有的数据
for var in listTest:
response1 += var.name + " "
response = response1
return HttpResponse("<p>"+response+"</p>")
def testdb_update(request):
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>")
def testdb_del(request):
test1 = Test.objects.get(id=1)
test1.delete()
#另外一种方式
#Test.objects.filter(id=1).delete()
#删除所有数据
#Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")
urls.py添加请求路径
from django.contrib import admin
from django.urls import path
from . import views
from . import views,testdb
urlpatterns = [
path('admin/', admin.site.urls),
path("",views.hello,name="hello"),
path("hello/",views.index),
path("testdb/",testdb.testdb),
path("selectTest/",testdb.testdb_select),
path("updateTest/",testdb.testdb_update),
path("delTest/",testdb.testdb_del),
]
启动项目进行测试
python manage.py runserver:0.0.0.0:8099