文章目录

  • 一、连接
  • 二、建表
  • 字段
  • 字段参数
  • 三、操作
  • 管理
  • 新增
  • 查询
  • 修改
  • 删除


新建Django项目demo

建立一个应用 app

python3 manage.py startapp app

django数据库驱动 pymysql mysqlclient django使用数据库_字段

一、连接

编辑主目录下settings.py文件,找到DATABASES

django数据库驱动 pymysql mysqlclient django使用数据库_字段_02

此为默认配置,会在项目下建立sqlite3数据库

若使用其他数据库,需进行修改,此处以MySQL为例:

DATABASES = {
    'default': {
        # 数据库引擎,此处以MySQL为例
        'ENGINE': 'django.db.backends.mysql',  
         #数据库名
        'NAME': <db_name>,
        # 连接用户名
        'USER': <user_name>, 
        # 密码
        'PASSWORD':<pwd>,  
        #数据库主机的ip地址
        'HOST':<IP>, 
        # 默认mysql访问端口
        'PORT':<port>, 
    }
}

二、建表

编辑app/models.py

from django.db import models


# Create your models here.
# 学生表
class Stu(models.Model):
    num = models.CharField(
        primary_key=True,
        verbose_name='学号',
        help_text='请输入学号',
        max_length=5
    )
    name = models.CharField(
        verbose_name='姓名',
        help_text='请输入姓名',
        max_length=5
    )
    age = models.IntegerField(
        verbose_name='年龄',
        help_text='请输入年龄'
    )
    sex = models.CharField(
        verbose_name='性别',
        help_text='请选择性别',
        default='M',
        choices=(
            ('M', '男'),
            ('W', '女')
        ),
        max_length=1
    )

    # 元数据
    class Meta:
        # 按'age'字段升序排列
        ordering = ['age']

    # 显示类信息
    def __str__(self):
        sex = '男' if self.sex == 'M' else '女'
        return '学号:%s  姓名:%s  年龄:%s 性别:%s' % (self.num, , self.age,sex)

字段

类型

说明

AutoField

一个自动增加的整数类型字段。通常不需要自己编写,Django会自动添加字段:id = models.AutoField(primary_key=True),自增字段,从1开始计数

CharField

字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。默认的表单标签是input text

TextField

大量文本内容,在HTML中表现为Textarea标签

IntegerField

整数类型,取值范围-2147483648到2147483647

DateField

日期类型,Python中的datetime.date()实例,例如2020-08-05

DateTimeField

日期时间类型,Python datetime.datetime()实例。多了小时、分和秒的显示,例如2020-08-05 23:08

FileField

上传文件类型

ImageField

图像类型

字段参数

类型

说明

default

字段的默认值,可以是值或者一个可调用对象

help_text

额外显示在表单部件上的帮助文本

primary_key

若为字段设置了primary_key=True,则当前字段变为主键; primary_key=True隐含null=False和unique=True的意思

verbose_name

为字段设置可读,直观的别名

choices

选择框标签,值为一个二维的二元元组;第一个元素表示数据库内的真实值,第二个表示页面上的显示内容

编辑完成后终端执行:

# 为改动创建迁移记录
python manage.py makemigrations  

# 将操作同步到数据库
python manage.py migrate

django数据库驱动 pymysql mysqlclient django使用数据库_字段_03

此时app/migrations下生成0001_initial.py文件

django数据库驱动 pymysql mysqlclient django使用数据库_字段_04

三、操作

管理

Django自带后台管理页面,使用前需创建管理员用户

在终端执行

python manage.py createsuperuser

输入用户名和密码,邮箱地址可选

django数据库驱动 pymysql mysqlclient django使用数据库_django_05

启动项目,访问http://127.0.0.1:8000/admin/

django数据库驱动 pymysql mysqlclient django使用数据库_数据库_06


django数据库驱动 pymysql mysqlclient django使用数据库_python_07

现在还无法看到建好的表,需在admin中注册,将app的模型加入站点内,接受站点管理

打开app/admin.py文件,修改为:

from django.contrib import admin
from .models import Stu
# Register your models here.

# 注册Stu
admin.site.register(Stu)

刷新

django数据库驱动 pymysql mysqlclient django使用数据库_python_08

新增

  • 可视化
    直接使用Django管理页面新增数据

django数据库驱动 pymysql mysqlclient django使用数据库_mysql_09

由于之前设定了 ordering = [‘age’],故添加的数据会按从小到大的顺序排列

  • 代码实现

在命令行执行

s = Stu(num='D-123',name='阿强',age=19,sex='M')

s.save()

上述代码等同于

s = Stu.objects.create(num='D-123',name='阿强',age=19,sex='M')

django数据库驱动 pymysql mysqlclient django使用数据库_python_10

django数据库驱动 pymysql mysqlclient django使用数据库_字段_11

查询

  • 获取所有对象
stu_list = Stu.objects.all()

django数据库驱动 pymysql mysqlclient django使用数据库_python_12

  • 过滤查询

例如查询所有男性同学

stu = Stu.objects.filter(sex='M')

django数据库驱动 pymysql mysqlclient django使用数据库_django_13

  • 单一查询

例如查询学号为A-123的同学

stu = Stu.objects.get(num='A-123')

django数据库驱动 pymysql mysqlclient django使用数据库_django_14

  • 查询是否存在

例如查询学号为B-456的同学是否存在

Stu.objects.filter(num='B-456').exists()

django数据库驱动 pymysql mysqlclient django使用数据库_python_15

修改

  • 可视化
    直接在管理页面修改

django数据库驱动 pymysql mysqlclient django使用数据库_python_16

  • 代码

所有男性同学年龄改为18岁

Stu.objects.filter(sex='M').update(age=18)

django数据库驱动 pymysql mysqlclient django使用数据库_字段_17

django数据库驱动 pymysql mysqlclient django使用数据库_django_18

删除

  • 可视化

直接在管理页面删除

  • 代码

删除学号为A-123的同学信息

Stu.objects.filter(num='A-123').delete()

django数据库驱动 pymysql mysqlclient django使用数据库_数据库_19


django数据库驱动 pymysql mysqlclient django使用数据库_django_20