创建数据库
使用工具或者命令 自己创建一个数据库
项目连接数据库
首先确保已经安装了支持MySQL的Python驱动。
可以使用pip命令来安装:
pip install mysqlclient
pip install pymysql
打开项目的settings.py文件,并添加如下配置信息到DATABASES字典中:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<database_name>', # MySQL数据库名称
'USER': '<username>', # MySQL登录用户名
'PASSWORD': '<password>', # MySQL登录密码
'HOST': '<host>', # MySQL服务器地址(默认为localhost)
'PORT': '<port>', # MySQL服务器端口号(默认为3306)
}
}
创建表
去app下的models.py中创建指定的类 + 命令,自动创建表
from django.db import models
# Create your models here.
class UserInfo(models.Model):
# id = models.AutoField(primary_key=True) #会自动创建
name = models.CharField(max_length=30, verbose_name='姓名') #varchar
password = models.CharField(max_length=30, verbose_name='密码') #varchar
age = models.IntegerField(verbose_name='年龄') # int
email = models.EmailField(verbose_name='邮箱',max_length=45) #varchar
命令
''' 必须先在settings.py中注册app,否则无法创建 '''
''' 读取所有已注册的App中的models.py文件,根据类生成配置文件并放到app下的migrations目录 '''
python manage.py makemigrations
''' 根据配置文件自动生成相应的SQL语句 '''
python manage.py migrate
修改、新增 表
修改 models.py
后 重新执行命令
class UserInfo(models.Model):
# id = models.AutoField(primary_key=True) #会自动创建
name = models.CharField(max_length=30, verbose_name='姓名')
#将 password字段 改成 pwd
pwd = models.CharField(max_length=30, verbose_name='密码')
age = models.IntegerField(verbose_name='年龄') # int
email = models.EmailField(verbose_name='邮箱',max_length=45)
# 添加一列
qq = models.CharField(max_length=11, verbose_name='QQ',null=True,blank=True) # 添加一列 null=True,blank=True 表示可以为空,否则会报错
wx = models.CharField(max_length=20, verbose_name='微信',default="") # 添加一列default="" 设置默认值
# 新增一个表
class Departmert(models.Model):
title = models.CharField(max_length=32, verbose_name='标题')
数据操作 增删改查
新增
# 第一种方式
models.UserInfo.objects.create(name="张三", password="12344556", age=18, email="123@qq.com")
# 第二种方式
models.UserInfo.objects.create(**{"name":"李四", "password":"123456", "age":18, "email":"456@qq.com"})
查询
#查询所有 【返回 列表】
res = models.UserInfo.objects.all()
# 查询 张三且18岁 【返回 列表】
res = models.UserInfo.objects.filter(name="张三",age=18)
# 查询 张三且18岁 【返回 一行对象】 取一条数据
res = models.UserInfo.objects.filter(name="张三",age=18).frist()
''' 未查询数据时返回 None '''
#查询 排序
res = models.UserInfo.objects.all().order_by("id") # asc
res = models.UserInfo.objects.all().order_by("-id") # desc
修改
'''
修改
在查询条件后面加上 update()
'''
# 把所有年龄改成 19
models.UserInfo.objects.all().update(age=19)
# 把id=20的用户年龄改成 19
models.UserInfo.objects.filter(id=10).update(age=20)
删除
'''
删除
在查询条件后面加上 delete()
'''
# 删除所有用户
models.UserInfo.objects.all().delete()
# 删除张三18岁的用户
models.UserInfo.objects.filter(name="张三",age=18).delete()
使用
在 web/ views.py
中写入数据库操作代码, 并在 urls.py
中配置好路由,访问不同的路由实现对应的功能
from web import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.login),
path('index/', views.index),
path('adduser/', views.addUser),
path('updateuser/', views.updateUser),
path('deleteuser/', views.deleteUser),
]
from django.shortcuts import render,redirect
from django.shortcuts import HttpResponse
from web import models # 导入models
import random
# 新增用户
def addUser(request):
username = "sss %s" % str(random.random());
models.UserInfo.objects.create(name = f"张{username}", password="123456", age=18, email="123@qq.com")
return HttpResponse("添加成功")
# 修改用户
def updateUser(request):
models.UserInfo.objects.filter(id=1).update(age=15)
return HttpResponse("修改成功")
# 删除用户
def deleteUser(request):
models.UserInfo.objects.filter(age=18).delete()
return HttpResponse("删除成功")
创建带外键的表
from django.db import models
class Dept(models.Model):
title = models.CharField(verbose_name='名称',max_length=32)
class User(models.Model):
name = models.CharField(verbose_name='姓名',max_length=12)
age = models.IntegerField(verbose_name='年龄')
salary = models.FloatField(verbose_name='工资')
# dept_id = models.IntegerField(verbose_name='部门ID') # 只是创建了一个字段,没有关联
# 关联外键
'''
dept 创建的时候会创建 dept_id
to_field="id" 可以不写,默认是id
on_delete=models.CASCADE 级联删除
on_delete=models.SET_NULL 设置为空,但是必须允许字段为空 null=True,blank=True
on_delete=models.SET_DEFAULT 设置为默认值 加上 default=1
'''
# dept = models.ForeignKey(verbose_name='关联部门',to='Dept',to_field="id",on_delete=models.CASCADE)
# dept = models.ForeignKey(verbose_name='关联部门',to='Dept',on_delete=models.SET_NULL,null=True,blank=True)
dept = models.ForeignKey(verbose_name='关联部门', to='Dept', on_delete=models.SET_DEFAULT, default=1)
'''
有外键表的数据操作
'''
''' 新增 '''
# 创建数据时,使用 dept_id = 部门id
models.User.objects.create(name = '张三',age = 22,salary = 3000, dept_id = 1)
# 创建数据时,也可以使用 dept = 部门对象
deptObj = models.Dept.objects.filter(id=1).first()
models.User.objects.create(name = '张三',age = 22,salary = 3000, dept = deptObj)
''' 查询 '''
# 使用部门ID
models.User.objects.filter(dept_id = 1)
# 通过部门名称搜索用户 dept__name 双下划线。
models.User.objects.filter(dept__name = '开发部')
# 获取用户的部门名称
UserObj = models.User.objects.filter(id=1).first()
UserObj.dept.name
报错
因为mysql5.7及以下是免费的数据库,8.0之后是收费的。使用免费的数据库更放心,使用上没有什么区别。这个提示只是Django的版本检测提示,把它注释掉就好了。
项目\venv\Lib\site-packages\django\db\backends\base\base.py
中 找到 check_database_version_supported()
函数 ,注释掉。
评论 (0)