青少年编程与数学 02-009 Django 5 Web 编程 05课题、数据库与ORM

青少年编程与数学 02-009 Django 5 Web 编程 05课题、数据库与ORM

  • 一、数据库
  • 二、ORM
  • 三、连接数据库
      • [在 Python 中连接 PostgreSQL](#在 Python 中连接 PostgreSQL)
        • [使用 `psycopg2` 库](#使用 psycopg2 库)
      • [在 Django 中连接 PostgreSQL](#在 Django 中连接 PostgreSQL)
      • [使用命令行工具连接 PostgreSQL](#使用命令行工具连接 PostgreSQL)
      • 注意事项
  • 四、练习
      • [步骤 1: 安装 Django 和 psycopg2](#步骤 1: 安装 Django 和 psycopg2)
      • [步骤 2: 创建 Django 项目](#步骤 2: 创建 Django 项目)
      • [步骤 3: 创建 Django 应用](#步骤 3: 创建 Django 应用)
      • [步骤 4: 配置 PostgreSQL 数据库](#步骤 4: 配置 PostgreSQL 数据库)
      • [步骤 5: 定义模型](#步骤 5: 定义模型)
      • [步骤 6: 迁移数据库](#步骤 6: 迁移数据库)
      • [步骤 7: 创建视图](#步骤 7: 创建视图)
      • [步骤 8: 创建表单](#步骤 8: 创建表单)
      • [步骤 9: 创建模板](#步骤 9: 创建模板)
      • [步骤 10: 配置 URL 路由](#步骤 10: 配置 URL 路由)
      • [步骤 11: 运行服务器](#步骤 11: 运行服务器)
      • [步骤 12: 测试项目](#步骤 12: 测试项目)
      • [步骤 13: 添加数据](#步骤 13: 添加数据)

课题摘要: 本文主要介绍了Django项目中数据库与ORM的相关内容。首先,列举了Django支持的多种数据库系统,如SQLite、PostgreSQL、MySQL等,并推荐PostgreSQL和SQLite作为常用选择。接着,详细讲解了Django ORM的核心功能,包括模型定义、查询集操作、CRUD操作以及关系映射等,强调了ORM在简化数据库操作、提高开发效率方面的作用。此外,还介绍了如何在Python和Django中连接PostgreSQL数据库,包括安装psycopg2库、配置数据库连接参数等步骤。最后,通过一个完整的Django项目示例,演示了如何连接并操作PostgreSQL数据库,创建一个简单的博客应用,涵盖了模型定义、数据库迁移、视图创建、表单处理、模板配置和URL路由设置等关键步骤。


一、数据库

Django 支持多种数据库系统,以下是常见的几种:

支持的数据库

  • SQLite:这是 Django 默认使用的数据库。它是一个轻量级、嵌入式的关系型数据库管理系统,不需要独立的服务器进程或配置,数据存储在一个单独的文件中。非常适合小型项目、原型开发和快速测试。
  • PostgreSQL:这是一个功能强大的开源关系型数据库,支持复杂的查询和事务处理,并且具有良好的性能和扩展性。它在数据密集型应用中表现出色,是 Django 社区中非常受欢迎的选择。
  • MySQL:这是一个流行的关系型数据库管理系统,具有良好的性能和稳定性。Django 提供了与 MySQL 的无缝集成。
  • Oracle:这是一个商业级的关系型数据库,广泛用于大型企业应用。
  • MariaDB:它是 MySQL 的一个分支,提供了更好的性能和一些额外的功能。

推荐使用的数据库

  • PostgreSQL:通常推荐使用 PostgreSQL,因为它功能强大、支持复杂查询、并且有良好的社区支持。它在事务管理和数据完整性保护方面表现出色。
  • SQLite:对于小型项目和快速原型开发,SQLite 是一个简单易用的选择。

选择合适的数据库取决于具体的应用需求、数据量、性能要求以及团队的熟悉度等因素。

二、ORM

Django 的 ORM(Object-Relational Mapping,对象关系映射)是 Django 框架的核心功能之一,它允许开发者使用 Python 代码来操作数据库,而不需要编写 SQL 语句。ORM 提供了一个抽象层,将数据库中的表映射为 Python 中的类,表中的记录映射为类的实例。以下是 Django ORM 的一些关键概念和功能:

模型(Models)

  • 定义模型 :模型是 Django 应用中的一个 Python 类,继承自 django.db.models.Model。每个模型对应数据库中的一个表。

  • 字段(Fields) :模型中的每个属性对应表中的一个字段。Django 提供了多种字段类型,如 CharFieldIntegerFieldDateTimeField 等。

    python 复制代码
    from django.db import models
    
    class Post(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        created_at = models.DateTimeField(auto_now_add=True)

查询集(QuerySets)

  • 查询集:是 Django ORM 中用于查询数据库记录的对象。它是一个可迭代的集合,表示数据库中的记录。

  • 创建查询集 :通过模型的 objects 管理器创建查询集。例如:

    python 复制代码
    posts = Post.objects.all()  # 获取所有记录
    recent_posts = Post.objects.filter(created_at__gte=datetime.date.today())  # 获取今天及以后创建的记录
  • 链式查询 :可以对查询集进行链式操作,如过滤、排序等。

    python 复制代码
    sorted_posts = Post.objects.filter(created_at__gte=datetime.date.today()).order_by('-created_at')

CRUD 操作

  • 创建(Create)

    python 复制代码
    new_post = Post(title='New Post', content='This is a new post.')
    new_post.save()
  • 读取(Read)

    python 复制代码
    post = Post.objects.get(pk=1)  # 获取主键为 1 的记录
  • 更新(Update)

    python 复制代码
    post.title = 'Updated Title'
    post.save()
  • 删除(Delete)

    python 复制代码
    post.delete()

关系映射

  • 一对多(ForeignKey)

    python 复制代码
    class Author(models.Model):
        name = models.CharField(max_length=100)
    
    class Post(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        author = models.ForeignKey(Author, on_delete=models.CASCADE)
  • 多对多(ManyToManyField)

    python 复制代码
    class Tag(models.Model):
        name = models.CharField(max_length=50)
    
    class Post(models.Model):
        title = models.CharField(max_length=200)
        content = models.TextField()
        tags = models.ManyToManyField(Tag)
  • 一对一(OneToOneField)

    python 复制代码
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        bio = models.TextField()

迁移(Migrations)

  • 生成迁移文件 :使用 makemigrations 命令生成迁移文件,记录模型的变更。

    bash 复制代码
    python manage.py makemigrations
  • 应用迁移 :使用 migrate 命令将迁移应用到数据库。

    bash 复制代码
    python manage.py migrate

Django 的 ORM 提供了一个强大且灵活的方式来处理数据库操作,使得开发者可以专注于业务逻辑的开发,而不需要编写复杂的 SQL 语句。

三、连接数据库

连接 PostgreSQL 数据库通常涉及几个步骤,包括安装必要的库、配置数据库连接参数以及使用适当的工具或代码来建立连接。以下是如何在不同环境中连接 PostgreSQL 数据库的详细步骤:

在 Python 中连接 PostgreSQL

使用 psycopg2

psycopg2 是 Python 中用于连接 PostgreSQL 的最常用的库。以下是使用 psycopg2 连接 PostgreSQL 的步骤:

  1. 安装 psycopg2

    bash 复制代码
    pip install psycopg2-binary
  2. 编写连接代码

    python 复制代码
    import psycopg2
    
    # 连接参数
    conn = psycopg2.connect(
        dbname="your_database_name",
        user="your_username",
        password="your_password",
        host="localhost",
        port="5432"
    )
    
    # 创建游标
    cur = conn.cursor()
    
    # 执行查询
    cur.execute("SELECT * FROM your_table_name")
    
    # 获取查询结果
    records = cur.fetchall()
    for record in records:
        print(record)
    
    # 关闭游标和连接
    cur.close()
    conn.close()

在 Django 中连接 PostgreSQL

如果你正在使用 Django,连接 PostgreSQL 的步骤如下:

  1. 安装 psycopg2

    bash 复制代码
    pip install psycopg2-binary
  2. 配置 settings.py

    在 Django 项目的 settings.py 文件中配置数据库设置:

    python 复制代码
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'your_database_name',
            'USER': 'your_username',
            'PASSWORD': 'your_password',
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
  3. 运行迁移

    运行 Django 的迁移命令以创建数据库表:

    bash 复制代码
    python manage.py makemigrations
    python manage.py migrate

使用命令行工具连接 PostgreSQL

如果你更喜欢使用命令行工具,可以使用 psql,这是 PostgreSQL 的命令行界面工具。

  1. 打开命令行

    在终端中输入以下命令:

    bash 复制代码
    psql -h localhost -U your_username -d your_database_name -p 5432
  2. 输入密码

    当提示输入密码时,输入你的数据库密码。

  3. 使用 psql

    一旦连接成功,你就可以在 psql 命令行中执行 SQL 命令了。

注意事项

  • 安全性:确保不要在代码中硬编码数据库密码,尤其是在生产环境中。可以使用环境变量或配置文件来管理敏感信息。
  • 防火墙和网络:如果你的 PostgreSQL 数据库不在本地运行,确保服务器的防火墙和网络配置允许你的客户端 IP 地址访问数据库端口(默认为 5432).
  • 权限:确保数据库用户有足够的权限来执行所需的数据库操作.

通过以上步骤,你可以在不同的环境中成功连接 PostgreSQL 数据库。

四、练习

下面是一个完整的 Django 项目示例,演示如何连接并操作 PostgreSQL 数据库。我们将创建一个简单的博客应用,允许用户查看和创建博客文章。

步骤 1: 安装 Django 和 psycopg2

首先,确保你已经安装了 Django 和 psycopg2。可以使用以下命令安装:

bash 复制代码
pip install django psycopg2-binary

步骤 2: 创建 Django 项目

创建一个新的 Django 项目:

bash 复制代码
django-admin startproject myblog
cd myblog

步骤 3: 创建 Django 应用

创建一个新的 Django 应用:

bash 复制代码
python manage.py startapp blog

步骤 4: 配置 PostgreSQL 数据库

编辑 myblog/settings.py 文件,配置 PostgreSQL 数据库:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

步骤 5: 定义模型

blog/models.py 文件中定义博客文章的模型:

python 复制代码
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

步骤 6: 迁移数据库

运行以下命令以创建数据库表:

bash 复制代码
python manage.py makemigrations
python manage.py migrate

步骤 7: 创建视图

blog/views.py 文件中创建视图函数:

python 复制代码
from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm

def post_list(request):
    posts = Post.objects.all().order_by('-created_at')
    return render(request, 'blog/post_list.html', {'posts': posts})

def post_create(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostForm()
    return render(request, 'blog/post_create.html', {'form': form})

步骤 8: 创建表单

blog/forms.py 文件中创建表单:

python 复制代码
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

步骤 9: 创建模板

blog/templates/blog 目录下创建模板文件 post_list.htmlpost_create.html

  • post_list.html:

    html 复制代码
    <!DOCTYPE html>
    <html>
    <head>
        <title>Blog</title>
    </head>
    <body>
        <h1>Blog Posts</h1>
        <ul>
            {% for post in posts %}
            <li>
                <h2>{{ post.title }}</h2>
                <p>{{ post.content }}</p>
                <p>Created at: {{ post.created_at }}</p>
            </li>
            {% endfor %}
        </ul>
        <a href="{% url 'post_create' %}">Create Post</a>
    </body>
    </html>
  • post_create.html:

    html 复制代码
    <!DOCTYPE html>
    <html>
    <head>
        <title>Create Post</title>
    </head>
    <body>
        <h1>Create Post</h1>
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Create</button>
        </form>
    </body>
    </html>

步骤 10: 配置 URL 路由

blog/urls.py 文件中配置 URL 路由:

python 复制代码
from django.urls import path
from . import views

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('create/', views.post_create, name='post_create'),
]

myblog/urls.py 文件中包含应用的 URL 配置:

python 复制代码
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('blog.urls')),
]

步骤 11: 运行服务器

启动 Django 开发服务器:

bash 复制代码
python manage.py runserver

步骤 12: 测试项目

打开浏览器,访问 http://127.0.0.1:8000/,你应该能看到博客文章列表。点击 "Create Post" 链接可以创建新的博客文章。

步骤 13: 添加数据

你也可以通过 Django admin 界面添加博客文章。首先,需要在 blog/admin.py 中注册模型:

python 复制代码
from django.contrib import admin
from .models import Post

admin.site.register(Post)

然后运行 python manage.py createsuperuser 创建一个管理员用户,登录 admin 界面(http://127.0.0.1:8000/admin/),添加一些博客文章.

通过以上步骤,你可以在 Django 中成功连接并操作 PostgreSQL 数据库,创建一个简单的博客应用。

相关推荐
明月看潮生2 小时前
青少年编程与数学 02-009 Django 5 Web 编程 04课题、应用创建
python·青少年编程·django·编程与数学
96772 小时前
如何将 Jupyter Notebook (.ipynb) 文件转换为 Python (.py) 文件
linux·python·jupyter
邹霍梁@开源软件GoodERP3 小时前
《手札·数转篇》中小制造企业的信息化升级:MES系统的价值与应用
python·开源·制造
虾球xz5 小时前
游戏引擎学习第92天
python·学习·游戏引擎
AuGuSt_815 小时前
【已解决】lxml.etree.ParserError: Document is empty
爬虫·python
九亿AI算法优化工作室&5 小时前
KOA优化最近邻分类预测matlab
人工智能·python·机器学习·matlab·分类·数据挖掘·回归
程序员东min5 小时前
Python:凯撒密码
python·算法
是十一月末5 小时前
深度学习之神经网络框架搭建及模型优化
人工智能·pytorch·python·深度学习·神经网络
max5006006 小时前
Python 脚本实现数据可视化
开发语言·python·信息可视化
WSSWWWSSW7 小时前
查看notebook的jupyter token
ide·python·jupyter