Python Django 连接 PostgreSQL 操作实例
更多Python学习内容:ipengtao.com
大家好,我是彭涛,今天为大家分享 Python Django 连接 PostgreSQL 操作实例,全文3500字,阅读大约10分钟
在Web开发中,使用Django连接到PostgreSQL数据库是一种常见的选择。本文将详细介绍如何在Django项目中连接到PostgreSQL数据库,并提供丰富的示例代码。
安装必要的库
首先,确保已经安装了Django和psycopg2
库,它是Django连接PostgreSQL所需的驱动。
pip?install?Django?psycopg2
配置数据库连接
在Django项目的settings.py
文件中,配置数据库连接信息,将ENGINE
设置为django.db.backends.postgresql
, 并填写NAME
, USER
, PASSWORD
, HOST
和PORT
等信息。
#?settings.py
DATABASES?=?{
????'default':?{
????????'ENGINE':?'django.db.backends.postgresql',
????????'NAME':?'your_database_name',
????????'USER':?'your_database_user',
????????'PASSWORD':?'your_database_password',
????????'HOST':?'localhost',
????????'PORT':?'5432',
????}
}
创建并应用迁移
运行以下命令,创建数据库迁移并应用。
python?manage.py?makemigrations
python?manage.py?migrate
定义模型
创建一个简单的模型,以演示数据库操作。
#?models.py
from?django.db?import?models
class?Book(models.Model):
????title?=?models.CharField(max_length=100)
????author?=?models.CharField(max_length=50)
????def?__str__(self):
????????return?self.title
进行数据库操作
在Django shell中,演示如何进行数据库操作。
python?manage.py?shell
#?在Django?shell中
#?导入模型
from?your_app.models?import?Book
#?创建新书
new_book?=?Book(title='Django?Essentials',?author='John?Doe')
new_book.save()
#?查询所有书籍
all_books?=?Book.objects.all()
print(all_books)
Django视图和模板
在Django项目中创建视图和模板,以展示从数据库中检索数据的方式。
#?views.py
from?django.shortcuts?import?render
from?.models?import?Book
def?book_list(request):
????books?=?Book.objects.all()
????return?render(request,?'book_list.html',?{'books':?books})
<!--?book_list.html?-->
{%?extends?'base.html'?%}
{%?block?content?%}
??<h2>Book?List</h2>
??<ul>
????{%?for?book?in?books?%}
??????<li>{{?book.title?}}?by?{{?book.author?}}</li>
????{%?endfor?%}
??</ul>
{%?endblock?%}
运行Django服务器
最后,运行Django开发服务器并查看连接到PostgreSQL的Web页面。
python?manage.py?runserver
访问http://127.0.0.1:8000/
,查看包含数据库中书籍信息的页面。
数据库迁移和更改模型
在实际开发中,可能需要对模型进行更改。演示如何通过数据库迁移来处理模型变更。
#?models.py
from?django.db?import?models
class?Book(models.Model):
????title?=?models.CharField(max_length=100)
????author?=?models.CharField(max_length=50)
????published_date?=?models.DateField()
????def?__str__(self):
????????return?self.title
运行以下命令进行迁移:
python?manage.py?makemigrations
python?manage.py?migrate
Django管理后台
使用Django自带的管理后台,轻松管理数据库记录。
#?admin.py
from?django.contrib?import?admin
from?.models?import?Book
admin.site.register(Book)
运行服务器,访问http://127.0.0.1:8000/admin/
,使用创建的超级用户账号登录,即可管理数据库中的书籍记录。
Django表单和视图
展示如何使用Django表单和视图来实现用户添加书籍的功能。
#?forms.py
from?django?import?forms
from?.models?import?Book
class?BookForm(forms.ModelForm):
????class?Meta:
????????model?=?Book
????????fields?=?['title',?'author',?'published_date']
#?views.py
from?django.shortcuts?import?render,?redirect
from?.models?import?Book
from?.forms?import?BookForm
def?add_book(request):
????if?request.method?==?'POST':
????????form?=?BookForm(request.POST)
????????if?form.is_valid():
????????????form.save()
????????????return?redirect('book_list')
????else:
????????form?=?BookForm()
????return?render(request,?'add_book.html',?{'form':?form})
<!--?add_book.html?-->
{%?extends?'base.html'?%}
{%?block?content?%}
??<h2>Add?Book</h2>
??<form?method="post">
????{%?csrf_token?%}
????{{?form.as_p?}}
????<button?type="submit">Add?Book</button>
??</form>
{%?endblock?%}
在urls.py
中添加新的URL模式,使用户能够访问添加书籍的页面。
#?urls.py
from?django.urls?import?path
from?.views?import?book_list,?add_book
urlpatterns?=?[
????path('books/',?book_list,?name='book_list'),
????path('add_book/',?add_book,?name='add_book'),
]
总结
在本文中,深入研究了如何在Django项目中连接到PostgreSQL数据库,并提供了详尽的示例代码,覆盖了从配置数据库连接到实现基本的Web应用功能的全过程。首先,介绍了安装必要的库,包括Django和psycopg2
,并详细说明了在settings.py
中配置数据库连接的步骤。
接着,创建了一个简单的模型,展示了如何使用Django的迁移系统来初始化和更新数据库结构。通过在Django shell中演示数据库操作,大家可以清晰了解如何进行常见的增删改查操作。还深入探讨了Django的视图、模板和管理后台的使用,演示了如何以用户友好的方式展示和管理数据库中的数据。此外,引入了Django表单和视图的概念,展示了如何通过表单让用户添加新的数据库记录。
总体而言,本文提供了一个全面而详实的教程,适用于初学者和有一定经验的开发者。通过这些示例,大家将获得在Django中连接和操作PostgreSQL数据库的实际经验,为构建功能齐全的Web应用奠定了坚实的基础。
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
更多Python学习内容:ipengtao.com
干货笔记整理
最经典的编程教材《Think Python》开源中文版.PDF下载
点击“阅读原文”,获取更多学习内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!