django连接oracle时setting 配置方法


Posted in Python onAugust 29, 2019

下一步是将新创建的应用程序与项目相关联。为此,您需要编辑 myproj 文件夹中的 settings.py 文件,将字符串“myproj.myapp”追加到 INSTALLED_APPS 字节组中,如下所示:

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 中的 JavaServer Page),并向其传递上下文(包括映射到模板变量名称的已获得数据)。

最后,视图返回由已呈现模板填充的 HttpResponse 对象,如果出现错误,则返回 HTTP 异常。

您可以看到,Django 基于将 Web 应用程序逻辑分为模型、视图和模板的概念,因此有效地将业务逻辑和展示分离开来。通常,这类似于当今许多其他 Web 框架中使用的模型-视图-控制器 (MVC) 范例。然而,在 Django 中,视图更像控制器,介于模型和模板之间。而 Django 模板更接近于 MVC 视图,因为这些模板负责使用从模型中获得的数据生成适当的用户界面。

现在您已掌握 Django 的概念,让我们继续在本部分开头启动的项目,构建一个与 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 演示模式中已经存在的表。

现在您已指示 Django 与特定 Oracle 数据库交互,可以继续构建数据模型。

与模型的对象关系映射

如前所述,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时setting 配置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python的Django框架编写从Google Adsense中获得报表的应用
Apr 17 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
Jun 13 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
PyQt5实现画布小程序
May 30 Python
python线程的几种创建方式详解
Aug 29 #Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 #Python
python多线程分块读取文件
Aug 29 #Python
用sqlalchemy构建Django连接池的实例
Aug 29 #Python
详解Python 字符串相似性的几种度量方法
Aug 29 #Python
python多线程同步之文件读写控制
Feb 25 #Python
python线程中的同步问题及解决方法
Aug 29 #Python
You might like
php中的一个中文字符串截取函数
2007/02/14 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
常用的javascript function代码
2008/05/23 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
javascript中"/"运算符常见错误
2010/10/13 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
关于js datetime的那点事
2011/11/15 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JS常用算法实现代码
2016/11/14 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
jsonp跨域及实现百度首页联想功能的方法
2018/08/30 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
2017/04/05 Python
Python制作刷网页流量工具
2017/04/23 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
爱国主义教育活动总结
2014/05/07 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
乐山大佛导游词
2015/02/02 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
校园广播站开场白
2015/06/01 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL