使用anaconda+Pycharm搭建Django项目-与SQLite数据库交互(三)

146 阅读3分钟

一、简介

Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 自带了一个轻量级的数据库引擎 —— SQLiteSQLite 是一个服务器端的数据库,它不需要单独的服务器进程,数据库就是服务器。这使得它非常适合于小型项目或原型开发。

当然,Django还支持PostgreSQLMySQLOracleSQLiteMariaDB这几种数据库。作为初学者,我们本章学习SQLite的基本使用,在后续文章中会学习与MySql,OraclePostgreSql等数据库的交互。

二、为什么使用SQLite

SQLite是Django 自带的一个轻量级的数据库引擎。SQLite 是一个服务器端的数据库,它不需要单独的服务器进程,数据库就是服务器。这使得它非常适合于小型项目或原型开发,且创建项目的时候已经同步添加了sqlite数据库文件,我们可以直接使用。

  1. 简单性:SQLite 是一个无需配置的数据库,它存储在一个单独的磁盘文件中。
  2. 轻量级:对于小型项目或个人项目来说,SQLite 是一个轻量级的选择。
  3. 内置支持:Django 默认支持 SQLite,无需额外安装数据库服务器。

三、使用步骤

1.配置数据库连接

settings.py文件中找到DATABASES配置。默认情况,Django 已经为 SQLite 设置好了:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

ENGINE: 指定了数据库引擎
NAME: 指定了数据库文件的路径。BASE_DIR / 'db.sqlite3' 表示数据库文件将存储在项目根目录下。

2.创建模型

在 Django 中,模型是数据库表的映射。让我们创建一个简单的模型来演示。

在应用层(通过python manage.py startapp myapp命令创建)app的models.py中定义一个模型。

from django.db import models

# Create your models here.
class Student(models.Model):
    name = models.CharField(max_length=100)  
    age = models.IntegerField()
    description = models.TextField()

3.迁移数据库

在创建或修改模型后,你需要应用迁移来更新数据库结构。

1.运行以下命令来创建迁移文件:

python manage.py makemigrations

2.应用迁移到数据库:

python manage.py migrate

4.使用模型

可以使用 Django 的 ORM 来操作数据库。在这里我们演示新增与查询。

1.打开 app/views.py 文件,并添加接口insertAndGetStudent

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from .models import Student

@csrf_exempt
def insertAndGetStudent(request):
    if request.method == 'POST':
        name = request.POST.get("name")
        age = request.POST.get("age")
        try:
            age = int(age)  # 将年龄转换为整数
        except ValueError:
            return HttpResponse("Invalid age. Please enter a valid integer for age.")
        description = request.POST.get("description")
        student = Student(name=name, age=age, description=description)
        student.save()
        students = Student.objects.all()
        return render(request, 'student.html', {'data': students})
    else:
        students = Student.objects.all()
        return render(request, 'student.html', {'data': students})

2.打开app/urls.py文件,添加url

path('student/', views.insertAndGetStudent),

3.在templates中添加student页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Student</title>
</head>
<body>
    <form action="/student/" method="post"></br>
        <!-- 用于防止跨站请求伪造的。确保在表单中包含这个令牌-->
        {% csrf_token %}
        学生姓名: <input type="text" name="name">
        年龄:<input type="text" name="age">
        描述:<input type="text"  name="description"></textarea>
        <input type="submit" value="提交">
        <hr >
        <h2>学生列表</h2>
        <table style="border: 1px">
        <tr>
            <th>学生姓名</th>
            <th>年龄</th>
            <th>描述</th>
        </tr>
        {% for item in data %}
            <tr>
                <td>{{ item.name }}</td>
                <td>{{ item.age }}</td>
                <td>{{ item.description }}</td>
            </tr>
        {% endfor %}
          </table>
</form>
</body>
</html>

4.运行项目

python .\manage.py runserver

5.运行结果

image.png