溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在django中連接oracle

發(fā)布時間:2021-05-21 17:01:14 來源:億速云 閱讀:1108 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)如何在django中連接oracle,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

INSTALLED_APPS = ( 
‘django.contrib.auth', 
‘django.contrib.contenttypes', 
‘django.contrib.sessions', 
‘django.contrib.sites', 
‘myproj.myapp' 
)

您已完成了應(yīng)用程序主干的構(gòu)建。然而,在可以查看應(yīng)用程序是否正常工作之前,需要執(zhí)行一些額外步驟。當(dāng)然,這些步驟可能會有所不同,具體取決于您希望應(yīng)用程序執(zhí)行的操作。例如,如果您要構(gòu)建不與數(shù)據(jù)庫交互的簡單應(yīng)用程序,則不需要將數(shù)據(jù)庫信息放在 settings.py 配置文件以及設(shè)計數(shù)據(jù)模型中。但在大多數(shù)情況下,您至少需要執(zhí)行以下五個步驟:

在 settings.py 中指定數(shù)據(jù)庫信息

創(chuàng)建模型

創(chuàng)建模板

創(chuàng)建視圖

在 urls.py 中配置 URL 模式

在繼續(xù)上述步驟之前,讓我們看一下 Django 應(yīng)用程序的高級視圖,以便您可以更好地了解 Django 中的組件如何工作。下圖示意性地顯示了 Django 應(yīng)用程序如何工作以滿足用戶請求。

根據(jù)此圖中的圖示,工作方式如下:

用戶輸入支持 Django 的站點的 URL 或在此站點的已加載頁面上執(zhí)行操作,從而將請求發(fā)送到托管此站點的 Web 服務(wù)器。

Django 的 URL 調(diào)度程序遍歷 urls.py 文件中的 URL 模式,并選擇第一個與用戶請求的 URL 匹配的模式,然后調(diào)用與所發(fā)現(xiàn)模式相關(guān)聯(lián)的視圖(Python 回調(diào)函數(shù))。

視圖使用數(shù)據(jù)模型獲得數(shù)據(jù)庫數(shù)據(jù),然后加載指定模板(已嵌入特殊模板標(biāo)記的 HTML 頁面;它類似于 Java 中的 JavaServer Page),并向其傳遞上下文(包括映射到模板變量名稱的已獲得數(shù)據(jù))。

最后,視圖返回由已呈現(xiàn)模板填充的 HttpResponse 對象,如果出現(xiàn)錯誤,則返回 HTTP 異常。

您可以看到,Django 基于將 Web 應(yīng)用程序邏輯分為模型、視圖和模板的概念,因此有效地將業(yè)務(wù)邏輯和展示分離開來。通常,這類似于當(dāng)今許多其他 Web 框架中使用的模型-視圖-控制器 (MVC) 范例。然而,在 Django 中,視圖更像控制器,介于模型和模板之間。而 Django 模板更接近于 MVC 視圖,因為這些模板負責(zé)使用從模型中獲得的數(shù)據(jù)生成適當(dāng)?shù)挠脩艚缑妗?/p>

現(xiàn)在您已掌握 Django 的概念,讓我們繼續(xù)在本部分開頭啟動的項目,構(gòu)建一個與 Oracle 數(shù)據(jù)庫交互的簡單應(yīng)用程序。

配置 Django 以便與 Oracle 數(shù)據(jù)庫交互

您必須先告訴 Django 如何連接到數(shù)據(jù)庫,才能利用 Django 的數(shù)據(jù)庫相關(guān)特性。您可以通過在項目的 settings.py 配置文件中配置數(shù)據(jù)庫相關(guān)設(shè)置來執(zhí)行此操作。對于在上一部分開頭創(chuàng)建的項目,您需要編輯 django-admin.py 生成的 myproj 目錄中的 settings.py。

在文本編輯器中打開 settings.py 文件,并根據(jù)您的數(shù)據(jù)庫編輯與數(shù)據(jù)庫相關(guān)的設(shè)置。例如,您可能按如下方式編輯它們:

DATABASE_ENGINE = ‘oracle' 
DATABASE_NAME = ‘XE' 
DATABASE_USER = ‘hr' 
DATABASE_PASSWORD = ‘hr' 
DATABASE_HOST = ‘localhost' 
DATABASE_PORT = ‘1521'

上述方式假設(shè)您在數(shù)據(jù)庫中安裝了 HR 演示模式并解除了鎖定。然而,在實際項目中,您很可能會使用針對特定應(yīng)用程序設(shè)計的自定義模式。需要注意的是,Django 可以省去您自己創(chuàng)建基礎(chǔ)表的麻煩。完成數(shù)據(jù)模型的構(gòu)建之后,您可以運行 manage.py syncdb 命令以自動創(chuàng)建數(shù)據(jù)庫表 — 針對 models.py 文件中的每個數(shù)據(jù)模型創(chuàng)建一個數(shù)據(jù)庫表。但為了簡單起見,本文中的示例將使用 HR 演示模式中已經(jīng)存在的表。

現(xiàn)在您已指示 Django 與特定 Oracle 數(shù)據(jù)庫交互,可以繼續(xù)構(gòu)建數(shù)據(jù)模型。

與模型的對象關(guān)系映射

如前所述,Django 支持與模型的對象關(guān)系映射,其中每個模型映射到單個數(shù)據(jù)庫表,并表示子類為 django.db.models.Model 標(biāo)準(zhǔn)類的 Python 類。

以下示例說明如何針對現(xiàn)有表定義模型。在此示例中,您將使用 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”

請注意,此處使用了一些模型字段選項。通過設(shè)置 primary_key = True,可顯式指定此字段是模型的主鍵。max_length 是 CharField 這一字符串字段所需的參數(shù)。如果將可選的 null 參數(shù)設(shè)置為 True,即表示告訴 Django 將空值作為 NULL 保存到數(shù)據(jù)庫中。默認(rèn)情況下,此參數(shù)設(shè)置為 False。要查看字段選項和字段類型的完整列表,您可以參閱 Django 文檔中的 Model 字段參考頁面。

在上述示例中,另一個需要注意的事項是類 Meta 的使用,您可以通過此類為模型提供元數(shù)據(jù)選項。在此特定示例中,您使用 db_table 選項顯式指定模型要映射到的表的名稱。實際上,默認(rèn)情況下,Django 假設(shè)表的名稱由模型類的名稱和應(yīng)用程序名稱組成(通過下劃線 (_) 符號分隔)。因此,在此特定示例中,Django 將查找名為 myapp_employees 的表。當(dāng)然,db_table 并不是您可用于模型內(nèi)部類 Meta 的唯一選項。您可以在 Django 文檔的 Model Meta 選項頁面上查看可用的 Meta 選項列表。

此處討論的示例很簡單,因為它僅顯示到單個數(shù)據(jù)庫表的映射。但實際上,您通常必須處理一組通過外鍵約束相互關(guān)聯(lián)的基礎(chǔ)數(shù)據(jù)庫表。為了解決此問題,Django 提供了 ForeignKey 字段類型,可讓您定義表示多對一關(guān)系的模型字段。

幸運的是,HR 演示模式僅包含一組通過外鍵約束相互關(guān)聯(lián)的表。例如,您可能選擇 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”

看一下上述模型定義,您可能已經(jīng)注意到,它針對外鍵模型字段使用名稱 manager,而不是實際在 departments 表中使用的 manager_id。實際上,在模型中使用的 manager 字段引用相應(yīng)的 employees 對象,而非此對象的 employee_id 字段。當(dāng)外鍵字段名稱要引用基礎(chǔ)表中的相應(yīng)列時,Django 會隱式地將 _id 追加到此名稱中。然而,在某些情況下,表中外鍵字段的名稱結(jié)尾可能不包含 _id。如果是這種情況,您可以使用外鍵模型字段的 db_column 參數(shù)顯式指定表列名稱。雖然在此特定示例中無需如此,但您可以使用以下語法在 departments 表中顯式指定外鍵列的名稱:

manager = models.ForeignKey(employees, db_column = ‘manager_id', null = True)

除了上述通過 ForeignKey 定義的多對一關(guān)系之外,Django 還支持一對一和多對多關(guān)系,您可以在模型中分別通過 OneToOneField 和 ManyToManyField 字段來定義。

關(guān)于如何在django中連接oracle就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI