Django连接Oracle数据库的Settings配置与模型构建详解
本文详细讲解如何在Django项目中配置连接Oracle数据库,包括在settings.py中设置DATABASE参数,以及如何利用ORM创建数据模型。内容涵盖从基础配置到处理外键关系、多对多关系的具体代码示例,帮助开发者快速实现Django与Oracle的交互。
Django应用注册与基础配置
接下来需要将新建的应用程序注册到项目中。请编辑myproj文件夹下的settings.py文件,在INSTALLED_APPS列表末尾追加字符串“myproj.myapp”,配置如下所示:
INSTALLED_APPS = (
‘django.contrib.auth',
‘django.contrib.contenttypes',
‘django.contrib.sessions',
‘django.contrib.sites',
‘myproj.myapp'
)
至此,应用程序的基础框架已搭建完毕。但在验证应用是否正常运行前,还需执行若干额外步骤。具体步骤取决于应用的功能需求:若构建不涉及数据库交互的简单应用,则无需在settings.py中配置数据库信息或设计数据模型;但在大多数常规场景下,至少需完成以下五个步骤:
在settings.py中指定数据库连接信息
创建数据模型
创建前端模板
创建视图逻辑
在urls.py中配置URL路由模式
Django工作流程解析
在推进上述步骤前,先了解Django应用的整体架构,以便理解各组件如何协同响应用户请求。下图示意了Django处理用户请求的工作流程。
结合该图示,具体工作流程如下:
用户在支持Django的网站输入URL或在已加载页面上执行操作,向托管该网站的Web服务器发送请求。
Django的URL调度器遍历urls.py文件中的URL模式,匹配第一个与用户请求URL相符的模式,并调用与该模式关联的视图(即Python回调函数)。
视图通过数据模型从数据库获取数据,随后加载指定的模板(嵌入特殊模板标记的HTML页面,类似于Java中的JSP),并将上下文(包含映射到模板变量名的已获取数据)传递给模板。
最终,视图返回由渲染后的模板填充的HttpResponse对象;若发生错误,则返回HTTP异常。
由此可见,Django基于将Web应用逻辑划分为模型、视图和模板的概念,有效实现了业务逻辑与展示层的分离。这通常类似于当今许多其他Web框架采用的模型-视图-控制器(MVC)范式。然而,在Django中,视图更接近于控制器,位于模型和模板之间;而Django模板更接近于MVC中的视图,因为模板负责利用从模型获取的数据生成相应的用户界面。
掌握Django基本概念后,让我们继续构建本节开头启动的项目,开发一个与Oracle数据库交互的简单应用。
Oracle数据库连接配置
配置Django以交互Oracle数据库
要利用Django的数据库相关特性,首先需告知Django如何连接数据库。这可以通过在项目的settings.py配置文件中配置数据库相关设置来实现。对于前文创建的项目,需编辑由django-admin.py生成的myproj目录下的settings.py文件。
使用文本编辑器打开settings.py文件,并根据实际数据库情况编辑数据库相关设置。例如,可按如下方式编辑:
DATABASE_ENGINE = ‘oracle'
DATABASE_NAME = ‘XE'
DATABASE_USER = ‘hr'
DATABASE_PASSWORD = ‘hr'
DATABASE_HOST = ‘localhost'
DATABASE_PORT = ‘1521'
上述配置假设数据库中已安装并解锁了HR演示模式。但在实际项目中,通常会使用为特定应用设计的自定义模式。值得注意的是,Django可免除手动创建基础表的繁琐工作。完成数据模型构建后,可运行manage.py syncdb命令自动创建数据库表——为models.py文件中的每个数据模型创建一个对应的数据库表。为简化示例,本文将直接使用HR演示模式中已存在的表。
数据模型与ORM映射
指示Django与特定Oracle数据库交互后,即可继续构建数据模型。
模型的对象关系映射(ORM)
如前所述,Django支持模型的对象关系映射,其中每个模型映射到单个数据库表,并表现为继承自django.db.models.Model标准类的Python类。
以下示例展示了如何针对现有表定义模型。在此示例中,将使用HR数据库中的employees表,仅针对该表的选定字段定义模型字段。在myproj/myapp目录下打开models.py文件并进行编辑,添加employees类,如下所示:
from django.db import models
Create your models here.
class employees(models.Model):
employee_id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=20, null = True)
last_name = models.CharField(max_length=25)
email = models.CharField(max_length=25)
class Meta:
db_table = “employees”
请注意,此处使用了若干模型字段选项。通过设置primary_key = True,可显式指定该字段为模型的主键。max_length是CharField字符串字段所需的参数。若将可选的null参数设为True,即告知Django将空值作为NULL保存到数据库中;默认情况下,此参数为False。如需查看字段选项和字段类型的完整列表,可参阅Django文档中的Model字段参考页面。
上述示例中另一值得注意的点是Meta类的使用,可通过此类为模型提供元数据选项。在此特定示例中,使用了db_table选项显式指定模型要映射到的表名。实际上,默认情况下Django假设表名由模型类名和应用名称组成(以下划线(_)分隔)。因此,在此特定示例中,Django将查找名为myapp_employees的表。当然,db_table并非可用于模型内部类Meta的唯一选项。可在Django文档的Model Meta选项页面上查看可用的Meta选项列表。
此处讨论的示例较为简单,仅展示到单个数据库表的映射。但实际上,通常需处理一组通过外键约束相互关联的基础数据库表。为解决此问题,Django提供了ForeignKey字段类型,允许定义表示多对一关系的模型字段。
幸运的是,HR演示模式仅包含一组通过外键约束相互关联的表。例如,可选择departments表(其manager_id字段是employees表中employee_id的外键),并定义以下模型(将其添加到models.py文件中):
class departments(models.Model):
department_id = models.IntegerField(primary_key=True)
department_name = models.CharField(max_length=30)
manager = models.ForeignKey(employees, null = True)
class Meta:
db_table = “departments”
观察上述模型定义,可能已注意到,外键模型字段使用了名称manager,而非departments表中实际使用的manager_id。实际上,模型中使用的manager字段引用相应的employees对象,而非该对象的employee_id字段。当外键字段名称需引用基础表中的相应列时,Django会隐式地在此名称后追加_id。然而,若表中外键字段的名称不以_id结尾,则可使用外键模型字段的db_column参数显式指定表列名称。虽然此特定示例中无需如此,但可使用以下语法在departments表中显式指定外键列的名称:
manager = models.ForeignKey(employees, db_column = ‘manager_id', null = True)
除上述通过ForeignKey定义的多对一关系外,Django还支持一对一和多对多关系,可在模型中分别通过OneToOneField和ManyToManyField字段进行定义。
以上关于Django连接Oracle时settings配置的方法即为全部内容,希望能对大家有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













