Django 最适合用于开发新应用,但也完全可以接入既有数据库。Django 提供了一些工具,尽可能自动完成这项工作。
本文假定你已经掌握 Django 入门教程介绍的基础知识。配置好 Django 后,可以按以下流程接入现有数据库。
配置数据库连接参数
你需要告诉 Django 数据库名称及连接参数。编辑 DATABASES 设置,为 'default' 连接设置以下键:
自动生成模型
Django 自带 inspectdb 工具,可通过检查现有数据库的结构创建模型。运行以下命令查看输出:
$ python manage.py inspectdb
命令中的 $ 是终端提示符,输入命令时无需键入。
使用标准 Unix 输出重定向,将结果保存到文件:
$ python manage.py inspectdb > models.py
这项功能的目的是节省起步时间,自动生成的结果并不是最终模型。详情参见
inspectdb文档。
整理模型并注册应用
整理并修正生成的模型后,将文件命名为 models.py,放进应用所在的 Python 包,然后把该应用加入 INSTALLED_APPS。
确定表的管理方式
默认情况下,inspectdb 创建的是不受 Django 管理的模型。模型 Meta 类中的 managed = False 会告诉 Django:不要管理对应表的创建、修改和删除。
class Person(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=70)
class Meta:
managed = False
db_table = "CENSUS_PERSONS"
如果你确实希望 Django 管理表的生命周期,应将上述 managed 选项改为 True,或者删除它,因为其默认值就是 True。
安装 Django 核心所需的表
接下来运行 migrate,安装所需的额外数据库记录,例如管理后台权限和内容类型:
$ python manage.py migrate
测试与调整
以上就是基本步骤。接下来,应继续调整 Django 生成的模型,让它们按预期工作。尝试通过 Django 数据库 API 访问数据,也尝试在 Django 管理后台编辑对象,再据此修改模型文件。
来源与许可
译自 How to integrate Django with a legacy database,对应 Django 6.1 文档。作者:Django 文档贡献者。
原文及示例依 Django 项目 BSD 三条款许可证分发。Django 是 Django Software Foundation 的注册商标。
BSD 三条款许可证原文
Copyright (c) Django Software Foundation and individual contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of Django nor the names of its contributors may be used
to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.












暂无评论内容