IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django_重温1_数据库 -> 正文阅读

[Python知识库]Django_重温1_数据库


前言

不做作,还是代码实在


一、Django的数据库

Django 模型使用自带的 ORM。

对象关系映射(Object Relational Mapping,简称 ORM )
Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
这里就介绍,一些关键。得记录在案

1. 常用的代码命令行

python manage.py migrate   # 创建表结构
python manage.py makemigrations app  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate app# 创建表结构

2. Setting.py对数据库的修改

DATABASES = { 
    'default': 
    { 
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'handsome', # 数据库名称
        'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 
        'PORT': 3306, # 端口 
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '123456', # 数据库密码
    }  
}

3. Django 使用 pymysql 模块连接 mysql 数据库:

# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()

4.使用模型,必须要创建一个 app

django-admin.py startapp app

5.学习连接

菜鸟教程Django模型层

二、代码温习(增删查改)

1.逻辑层view.py

from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
from django.views.decorators.csrf import csrf_exempt

from First import models


def tr(request):
    Text = "我的尝试!!"
    return HttpResponse(Text)


def home(request):
    a = "这是一个表单"
    b = [1, 2, 3]
    return render(request, 'home.html', context={"a": a, "b": b})


def search(request):
    request.encoding = 'UTF-8'
    # if request.path==''
    #
    print(request.path)
    if 'q' in request.GET and request.GET['q']:
        msg = "你搜索的内容:" + request.GET['q']
    else:
        msg = '你提交了空表单!'
    return render(request, 'getform.html', {"msg": msg})


def searchpost(request):
    # res={}
    # if request.POST:
    #     res['result']=request.POST.get('textq')
    #     print(res['result'])#在控制台看结果
    #     print(request.path)

    return render(request, 'bookform.html')


# 书籍的添加
def add_book(request):
    msg = ""
    if request.POST:
        title = request.POST.get('title')
        price = request.POST.get('price')
        publish = request.POST.get('publish')
        pub_date = request.POST.get('pub_date')
        # 这是第一种方法
        # book=models.books(title=title,price=price,publish=publish,pub_date=pub_date)
        # book.save()#进行保存!!

        # 这是第二章方法**推荐
        book = models.books.objects.create(title=title, price=price, publish=publish, pub_date=pub_date)
        print(book, book.price)
        msg = '保存成功!!'
    return render(request, 'home.html', {'msg': msg})

# 书籍的查询
def search_book(request):
    # 查询所有
    # book=models.books.objects.all()
    # 查询筛选返回的是 QuerySet 类型数据,类似于 list,使用循环提取出来
    # 只能使用等于号 = ,__in __range 用于读取区间,= 号后面为列表 。
    # __gt __gte __lt __lte大于号 ,= 号后面为数字。
    # __contains __icontains 不区分大小写的包含__startswith 以指定字符开头,__startswith 以指定字符开头,= 号后面为字符串
    # __year __month __day 是 DateField 数据类型的年份,= 号后面为数字2008# book=models.books.objects.filter(pk=4)#pk是主键primary key=3,==id=3
    # exclude() 方法用于查询不符合条件的数据。
    # get() 方法用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,
    # 如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
    # order_by() 方法用于对查询结果进行排序。降序为在字段前面加个负号 -
    # reverse() 方法用于对查询结果进行反转。
    # count() 方法用于查询数据的数量返回的数据是整数。
    # first() 方法返回第一条数据返回的数据是模型类的对象也可以用索引下标 [0]
    # last() 方法返回最后一条数据返回的数据是模型类的对象不能用索引下标 [-1]
    # exists() 方法用于判断查询的结果 QuerySet 列表里是否有数据
    # 返回的数据类型是布尔,有为 true,没有为 false。
    # 注意:判断的数据类型只能为 QuerySet 类型数据,不能为Book.objects.count()整型和models.Book.objects模型类的对象。
    # values() 方法用于查询部分字段的数据。
    # 不是模型类的对象,而是一个可迭代的字典序列,  字典   里的键是字段,值是数据。
    # values_list() 方法用于查询部分字段的数据。
    # 不是模型类的对象,而是一个个元组,元组   0.1里放的是查询字段对应的数据。
    # distinct() 方法用于对数据进行去重# 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在
    book = models.books.objects.filter(price__range=[100, 500])  # pk是主键primary key=3,==id=3
    for i in book:
        print(i.price)
    print(book)
    msg = '查询结果成功!!'
    return render(request, 'home.html', {'msg': msg})

# 书籍的删除
def delete_book(request):
    #books=models.Book.objects.all().delete()   # 删除成功
    # 方式一:使用模型类的
    # 对象.delete()#books=models.Book.objects.filter(pk=8).first().delete()
    # 返回值:元组,第一个元素为受影响的行数。
    # 方式二:使用 QuerySet 类型数据.delete()(推荐)
    # 返回值:元组,第一个元素为受影响的行数。
    book = models.books.objects.filter(pk__in=[1, 2]).delete()  # pk是主键primary key=3,==id=3
    # for i in book:
    #     print(i.price)
    print(book)
    msg = '删除成功!!'
    return render(request, 'home.html', {'msg': msg})

# 书籍的修改
def update_book(request):
    # 方式一:
    # 模型类的对象.属性 = 更改的属性值
    # 模型类的对象.save()
    # 方式二:QuerySet
    # 类型数据.update(字段名=更改的数据)(推荐)
    # 返回值:整数,受影响的行数
    book = models.books.objects.filter(pk__in=[3,4]).update(price=167) # QuerySet 类型数据
    # for i in book:
    #     print(i.price)
    # book.price=145
    # book.save()
    print(book)
    msg = '修改成功!!'
    return render(request, 'home.html', {'msg': msg})

2.页面层

主页面home.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>不拘一格降人才</title>
</head>
<body>
<button><a href="{% url 'getform' %}">填空get表单</a></button><br>
<button><a href="{% url 'postform' %}">书籍页面</a></button>
<p>表单结果:{{ msg }}</p>
</body>
</html>


get请求页面getform.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p>{{ a }}</p>
<p>{{ b.0 }}</p>
    <form action="{% url 'getform' %}" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
<p>{{ msg }}</p>
</body>
</html>

书籍页面bookform.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>哈哈哈</title>
</head>
<body>
<div align="left">
    <form action="{% url 'add_book' %}" method="post">
        {% csrf_token %}
        书名:<input type="text" name="title"><br>
        价格:<input type="text" name="price"><br>
        出版社名:<input type="text" name="publish"><br>
        出版日期:<input type="date" name="pub_date"><br>
        <input type="submit" value="添加书籍">
    </form>
</div>
<button><a href="{% url 'home' %}">返回首页</a></button><br>
<button><a href="{% url 'search_book' %}">进行查询</a></button>
<button><a href="{% url 'delete_book' %}">进行删除</a></button>
<button><a href="{% url 'update_book' %}">进行修改</a></button>
</body>
</html>

3.模型层

models.py

from django.db import models

# Create your models here.
class books(models.Model):
    id=models.AutoField(primary_key=True)#id 会自动导入,也可以手动设置
    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()#出版时间



4.路由设置

  • 总路由urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('First.urls'))
]
  • 分路由urls.py
"""djangoProject1 URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path

from First import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('tr/', views.tr, name='try'),
    #首页
    path('', views.home, name='home'),
    #POST和GET表单
    path('getform/', views.search, name='getform'),
    path('postform/', views.searchpost, name='postform'),
    #数据库BOOK操作
    path('add_book/',views.add_book,name='add_book'),#增加
    path('search_book/',views.search_book,name='search_book'),#查询
    path('delete_book/',views.delete_book,name='delete_book'),#删除
    path('update_book/',views.update_book,name='update_book')#修改


]



总结

总之今天是受益匪浅。。。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:51:09  更:2022-01-01 13:51:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:28:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码