django 数据库 单表操作

model.py

python 复制代码
from django.db import models

# Create your models here.
#继承models.Model成为模型类
#模型就是一个数据表
#类字段就是表字段
#实例化对象就是表数据
#class 定义类
#classes分类   类名
#创建完模型类之后都需要迁移映射

'''
int            IntegerField  整形
varchar        CharField 字符类型
longtext       TextField  文本类型
date          DateField  日期类型
             BooleanField 布尔类型
            DateTimeField   日期时间类型
ImageField 图片文件类型
FileField   文件类型
AutoField    自增长类型

字段的常用属性   表约束
unique
null  默认就是非空  指定为True
primary_key      主键
default   默认值
blank  表单提交的值可以为空  form
datefield.autonow 每次修改都会将当前时间更新进去
datefield.autonow_add  第一次会添加,会将当前时间设置进去,以后不会修改这个值

'''
class Classes(models.Model):
    #设置自增长约束 主键约束
    id=models.AutoField(primary_key=True)
    #限制最长字段值为50 默认都有非空约束,设置可以不空 null=True
    name=models.CharField(max_length=50)


    #重写输出魔法方法
    def __str__(self):
        return 'Classes<name=%s>'%self.name

数据迁移

PyCharm 中 Tools Run manage.py...........这个选项

makemigrations demo

migrate demo 提交

上面model.py是在demo中的

view.py

python 复制代码
from demo.models import Classes
def classes(request,**kwargs):
    #实例化一个对象  并传入字段字
    # classes1=Classes(name="python")
    # classes1.save()   #保存数据
    #第二种:创建一个对象
    # classes2=Classes()
    # classes2.name="java"
    # classes2.save()
    #第三种:通过类调用创建方法创建对象传值
    #Classes.objects.create(name="deepseek")

    #第四种 get_or_create获取或创建
    #有数据则获取  没有则添加
    #Classes.objects.get_or_create(name="html")

    #查询所有数据
    res = Classes.objects.all()
    for i in res:
        print(i.name)
    # print(res)

    # 查询 单条数据 条件查询    如果有多个 会报错
    # res1=Classes.objects.get(name="java")
    # print(res1)

    # 查询多条数据    条件查询
    # res2=Classes.objects.filter(name="python")
    # print(res2)

    # 修改数据
    # 修改一条数据  1先要获取要修改的数据
    # res3=Classes.objects.get(name="html")
    # res3.name="HTML"
    # res3.save()

    # 修改多条数据
    # Classes.objects.filter(name="python").update(name='python3')

    # 删除单条数据
    # Classes.objects.get(name="python3").delete()

    # 删除金条
    # Classes.objects.filter(name='java').delete()

    # 查询方法
    # 获取第一条数据
    print(Classes.objects.first())
    print('-' * 20)
    # 获取最后一条数据
    print(Classes.objects.last())
    print('-' * 20)
    # 排除查询
    print(Classes.objects.exclude(name='python'))
    print('-' * 20)
    # 对结果进行排序    只能根据数字进行排序
    print(Classes.objects.order_by('id'))
    print('-' * 20)
    # 对结果进行逆向排序
    print(Classes.objects.order_by('-id'))
    print('-' * 20)

    #查询条件
    #根据字符来操作
    #忽略大小写
    print(Classes.objects.get(name__iexact='PYTHON'))
    #包含您指定的字符
    print(Classes.objects.filter(name__contains='t'))
    #以什么字符开始
    print(Classes.objects.filter(name__startswith='d'))
    #以什么字符结束
    print(Classes.objects.filter(name__endswith='k'))
    #成员 字段值中是否在您给定的范围里面
    print(Classes.objects.filter(name__in=['python','java']))
    #根据数字
    #大于
    print(Classes.objects.filter(id__gt=3))

    #大于等于
    print(Classes.objects.filter(id__gte=3))
    #小于
    print(Classes.objects.filter(id__lt=3))
    #小于等于
    print(Classes.objects.filter(id__lte=3))
    #区间   数值范围
    print(Classes.objects.filter(id__range=(3,6)))
    #判断是否为空
    print(Classes.objects.filter(name__isnull=True))         #查询为空的值



    return HttpResponse('添加成功')

外部urls.py

python 复制代码
from django.contrib import admin
from django.urls import path
from django.urls import include, path
urlpatterns = [
    path('admin/', admin.site.urls),
    path('demo/', include('demo.urls')),
]

demo中 urls.py

python 复制代码
from demo import views
from django.contrib import admin
from django.urls import path, include, re_path
urlpatterns = [
    #<str:info  <转换器的类型:参数名>   参数名接受路由传递过来的数据
    path('test/<str:info>',views.test),
    #地址里面只能写数字
    #path('test/<int:info>',views.test),
    #地址中可以写字母数字以下划线 横杠
    #path('test/<slug:info>',views.test),
    #地址中可以写uuid
    #path('test/<uuid:info>', views.test),
    #path('test/<path:info>', views.test),
    #path('Tv/',views.Tv)
    #?P  是 规定参数的,固定的语法格式
    #<参数名>
    #^限制以什么字符开头   $限制以什么字符结束
    #()把符合规则字符保留下来传给info参数接受
    #[]限制路由参数字符串只能有数字和abc字母组成
    #+字符个的限制 为一次以上
    re_path("^re_Tv/(?P<info>[0-9abc]+)$",views.Tv),
    path('nav/<str:class>',views.nav),
    path('404/',views.not_find, name='not_find'),
    path('index/',views.index,name='index'),
    path('classes/', views.classes),
]

init.py

python 复制代码
import pymysql
#设置django操作数据库的引擎为pymysql第三方库
pymysql.install_as_MySQLdb()
相关推荐
A.说学逗唱的Coke几秒前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
佳&弥19 分钟前
数据库提权
服务器·数据库·安全·web安全·网络安全
智购科技自动售货机工厂26 分钟前
2026自动售货机电机驱动芯片选型:从L298N到DRV8870的工程实践~YH
大数据·开发语言·数据库·人工智能·单片机·嵌入式硬件·scikit-learn
国科安芯35 分钟前
ASL3159S:把精密信号的“破音“挡在切换之外的 0.9Ω 开关
服务器·网络·数据库·架构·状态模式·抗辐射加固
克里斯蒂亚诺更新1 小时前
win下如何将redis自启动
数据库·redis·缓存
青禾8371 小时前
MySQL 数据库完全指南:DDL、DML、DCL 与用户权限管理
数据库·oracle
tachibana21 小时前
大语言模型基础
数据库·人工智能·语言模型·自然语言处理·大模型·llm
小王C语言1 小时前
MySQL 事务:事务自动提交、查看/修改事务隔离级别、读未提交(RU)、读提交(RC)、可重复读(RR)、串行化
数据库·mysql
yu俞娥宝1 小时前
AI Agent可观测性:破解多步推理黑盒
数据库
TDengine (老段)1 小时前
TDengine 应用案例 — IoT 设备监控
大数据·数据库·物联网·时序数据库·tdengine·涛思数据