新聞中心
Django 是一款非常流行的 Python web 框架,它提供了一種高效、靈活、易于使用的方式來構(gòu)建 Web 應(yīng)用程序。Django 中自帶的 ORM(Object-Relational Mapping)工具能夠讓程序員輕松地創(chuàng)建和管理數(shù)據(jù)庫,而不需要手動(dòng)寫 SQL。在本文中,我們將深入探討 Django 的數(shù)據(jù)庫連接及操作,介紹如何使用 Django 的 ORM 創(chuàng)建、插入、更新和刪除數(shù)據(jù)等操作。

在網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作過程中,需要針對(duì)客戶的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場(chǎng)情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計(jì)方向。成都創(chuàng)新互聯(lián)還需要根據(jù)客戶的需求進(jìn)行功能模塊的開發(fā)和設(shè)計(jì),包括內(nèi)容管理、前臺(tái)展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計(jì)和安全保護(hù)等功能。
一、Django 的數(shù)據(jù)庫連接
Django 的 ORM 工具支持多種數(shù)據(jù)庫,包括 PostgreSQL、MySQL、Oracle 和 SQLite 等。Django 的 ORM 工具提供了一個(gè)統(tǒng)一的接口,可以在不同的數(shù)據(jù)庫系統(tǒng)之間切換,而且不需要修改任何代碼。在配置 Django 框架使用的數(shù)據(jù)庫之前,需要在項(xiàng)目的 settings.py 文件中設(shè)置 DATABASES 變量。例如:
“`
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘mydatabase’,
‘USER’: ‘mydatabaseuser’,
‘PASSWORD’: ‘mypassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
}
}
“`
這里我們使用 MySQL 數(shù)據(jù)庫作為例子,其中 ENGINE 變量指定了使用的數(shù)據(jù)庫引擎。 在這個(gè)例子中,我們使用 mysql 數(shù)據(jù)庫引擎連接名為 mydatabase 的數(shù)據(jù)庫,連接用戶名為 mydatabaseuser,密碼為 mypassword,連接地址為 localhost,連接端口為 3306。需要根據(jù)實(shí)際情況進(jìn)行修改。
二、Django 的數(shù)據(jù)庫操作
2.1 創(chuàng)建數(shù)據(jù)庫表
Django 的 ORM 工具可以根據(jù) models.py 文件自動(dòng)創(chuàng)建數(shù)據(jù)庫表。在 models.py 文件中定義的類表現(xiàn)為數(shù)據(jù)庫中的一個(gè)表,類中的每個(gè)屬性對(duì)應(yīng)著數(shù)據(jù)庫表中的一列。Django 還提供了一些字段類型,如 BooleanField、CharField、DateField 等,這些字段可以指定表的列名、數(shù)據(jù)類型以及其他有用的參數(shù)。
例如,我們定義一個(gè)名為 Student 的模型類:
“`
from django.db import models
class Student(models.Model):
student_id = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=50)
age = models.IntegerField()
gender = models.CharField(max_length=10)
grade = models.CharField(max_length=10)
“`
這個(gè)模型類對(duì)應(yīng)著一個(gè)名為 Student 的數(shù)據(jù)庫表,表中有 student_id、name、age、gender、grade 這 5 個(gè)列,每個(gè)列的數(shù)據(jù)類型已在代碼中定義。
要在數(shù)據(jù)庫中創(chuàng)建這個(gè)表格,需要在控制臺(tái)中輸入以下命令:
“`
python manage.py makemigrations
python manage.py migrate
“`
其中 makemigrations 命令會(huì)根據(jù) models.py 文件創(chuàng)建遷移文件,并存儲(chǔ)在 migrations 文件夾中;migrate 命令會(huì)應(yīng)用這些遷移文件。
2.2 插入數(shù)據(jù)
ORM 工具提供了一個(gè) save() 方法,可以將新的數(shù)據(jù)對(duì)象保存到數(shù)據(jù)庫中:
“`
student = Student(student_id=’20230001′, name=’Tom’, age=18, gender=’male’, grade=’2023′)
student.save()
“`
其中 student_id 是該條數(shù)據(jù)的主鍵,因此需要設(shè)置為唯一。
2.3 更新數(shù)據(jù)
ORM 工具還提供了一個(gè) update() 方法,用于更新已有的數(shù)據(jù):
“`
student = Student.objects.filter(name=’Tom’).first()
student.age = 20
student.save()
“`
這個(gè)例子中,我們先使用 filter() 方法獲取 name 為 ‘Tom’ 的學(xué)生,然后將其 age 屬性更新為 20,最后調(diào)用 save() 方法保存修改。
2.4 刪除數(shù)據(jù)
ORM 工具提供了一個(gè) delete() 方法,可以刪除指定的數(shù)據(jù)對(duì)象:
“`
student = Student.objects.filter(name=’Tom’).first()
student.delete()
“`
這里我們刪除了名字為 ‘Tom’ 的學(xué)生數(shù)據(jù)。
2.5 查詢數(shù)據(jù)
ORM 工具提供了豐富的查詢方法,如 filter()、exclude()、get()、all() 等等,可以根據(jù)不同的條件查詢數(shù)據(jù)。例如:
“`
# 查詢?nèi)繉W(xué)生的數(shù)據(jù)
students = Student.objects.all()
# 查詢性別為女性的學(xué)生
students = Student.objects.filter(gender=’female’)
# 查詢年齡在 18 到 20 之間的學(xué)生
students = Student.objects.filter(age__range=(18, 20))
“`
這里使用 filter() 方法查詢數(shù)據(jù),其中 __range 表示取值范圍。返回的結(jié)果是一個(gè) QuerySet 對(duì)象,可以對(duì)其中的數(shù)據(jù)進(jìn)行操作。
三、
Django 的 ORM 工具為我們帶來了許多便利,可以使用 Python 代碼管理和查詢數(shù)據(jù)庫,降低了開發(fā)復(fù)雜 Web 應(yīng)用的難度。在實(shí)際開發(fā)中,我們可以從配置數(shù)據(jù)庫連接開始,快速地使用 Django 的 ORM 工具進(jìn)行數(shù)據(jù)庫操作,提高開發(fā)效率。
相關(guān)問題拓展閱讀:
- Django里面怎么實(shí)現(xiàn)數(shù)據(jù)庫視圖啊 就是虛擬表
- django使用已有的數(shù)據(jù)庫表怎么建立model
- 關(guān)于django數(shù)據(jù)庫設(shè)計(jì),雙表互為外鍵
Django里面怎么實(shí)現(xiàn)數(shù)據(jù)庫視圖啊 就是虛擬表
django里1個(gè)model對(duì)應(yīng)1個(gè)表 view里面可以用到任意的model啊
正經(jīng)回答:先在數(shù)據(jù)庫中建立好視圖,然后django中建立對(duì)應(yīng)的model。表所對(duì)應(yīng)的類下面再建立一個(gè)Meta類,大致如下
class ViewModel(models.Model):
“””這個(gè)model類對(duì)應(yīng)你凱慶所禪祥建立好的視圖”””
賀孫搏 class Meta(object):
“””同理,該方法可用于使用mysql中任何已有的表,不僅是視圖”””
db_table = ‘your_view’ #顯式指定表名,也就是你建立的視圖的名字
managed = false #默認(rèn)是ture,設(shè)成false django將不會(huì)執(zhí)行建表和刪表操作
# 建立字段間的映射
# 需要注意的是,必須設(shè)一個(gè)字段為主鍵
# 不然django會(huì)自動(dòng)創(chuàng)建一個(gè)id字段為主鍵,引發(fā)錯(cuò)誤
百度知道越來越辣雞了,全是答非所問的。
視圖相當(dāng)於虛擬的表凳毀櫻,可以使用正常SQL語句進(jìn)行增刪查改的操作,返回一張表。其實(shí)說白了與棗叢表的功能基本一樣。
觸發(fā)器,是在執(zhí)行增 刪 改的時(shí)候觸發(fā)的一些SQL操作??梢栽谠鰟h改之後觸發(fā) SQl,也可以在增刪改的時(shí)候替代SQL。有兩種不同的觸發(fā)模式而已。
一下是來自官方的標(biāo)準(zhǔn)解釋:
什么是視圖?
在 SQL 中,視圖是基于 SQL 語句的結(jié)果集的可視化的表。
視圖包含行和列,就像一個(gè)真實(shí)的表。視圖中的字段就是來自一個(gè)或多個(gè)數(shù)據(jù)庫中的真實(shí)的表中的字段。我們可以向視圖添加 SQL 函數(shù)、WHERE 以及 JOIN 語句,我們也可以提交數(shù)據(jù),就像這些來自于某個(gè)單一的表。
注釋:數(shù)據(jù)庫的設(shè)計(jì)和結(jié)構(gòu)不會(huì)受到視圖中的函數(shù)、where 或 join 語句的影響。
SQL CREATE VIEW 語法
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注釋:視圖總是顯示最近的數(shù)據(jù)。每當(dāng)用戶查詢視圖時(shí),數(shù)據(jù)庫引擎通過使用 SQL 語句來重建數(shù)據(jù)。
觸發(fā)器是一種特殊類型的存儲(chǔ)過程,它不同于之前的我們介紹的存儲(chǔ)過程。觸發(fā)器主要是通過事件進(jìn)行觸發(fā)被自動(dòng)調(diào)用執(zhí)行的。而存儲(chǔ)過程可以通過存儲(chǔ)過程的名稱被調(diào)用。
? 什么是觸發(fā)器
觸發(fā)器對(duì)表進(jìn)行插入、更新、刪除的時(shí)候會(huì)自動(dòng)執(zhí)行的特殊存儲(chǔ)過程。觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。觸發(fā)器余世和普通的存儲(chǔ)過程的區(qū)別是:觸發(fā)器是當(dāng)對(duì)某一個(gè)表進(jìn)行操作。諸如:update、insert、delete這些操作的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用執(zhí)行該表上對(duì)應(yīng)的觸發(fā)器。SQL Server 2023中觸發(fā)器可以分為兩類:DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會(huì)影響多種數(shù)據(jù)定義語言語句而激發(fā),這些語句有create、alter、drop語句。
DML觸發(fā)器分為:
1、 after觸發(fā)器(之后觸發(fā))
a、 insert觸發(fā)器
b、 update觸發(fā)器
c、 delete觸發(fā)器
2、 instead of 觸發(fā)器 (之前觸發(fā))
其中after觸發(fā)器要求只有執(zhí)行某一操作insert、update、delete之后觸發(fā)器才被觸發(fā),且只能定義在表上。而instead of觸發(fā)器表示并不執(zhí)行其定義的操作(insert、update、delete)而僅是執(zhí)行觸發(fā)器本身。既可以在表上定義instead of觸發(fā)器,也可以在視圖上定義。
觸發(fā)器有兩個(gè)特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統(tǒng)在內(nèi)存中創(chuàng)建者兩張表,不會(huì)存儲(chǔ)在數(shù)據(jù)庫中。而且兩張表的都是只讀的,只能讀取數(shù)據(jù)而不能修改數(shù)據(jù)。這兩張表的結(jié)果總是與被改觸發(fā)器應(yīng)用的表的結(jié)構(gòu)相同。當(dāng)觸發(fā)器完成工作后,這兩張表就會(huì)被刪除。Inserted表的數(shù)據(jù)是插入或是修改后的數(shù)據(jù),而deleted表的數(shù)據(jù)是更新前的或是刪除的數(shù)據(jù)。
django使用已有的數(shù)據(jù)庫表怎么建立model
Model是django項(xiàng)目的基礎(chǔ), 如果一開始沒有好好設(shè)計(jì)好, 那么在接下來的開發(fā)過程中就會(huì)遇到更多的問題. 然而, 大多數(shù)的開發(fā)人員都容易在缺少思考 的情況下隨意的增加或修改model. 這樣做的后果就是, 在接下來的開發(fā)過程中, 我們不得不做出更多努力…
在網(wǎng)上看到都是使用Django的models和makemigration,migrate命令來創(chuàng)建新表,并使用??墒俏业臄?shù)據(jù)已經(jīng)存在了已經(jīng)創(chuàng)建好,并且已經(jīng)存儲(chǔ)有數(shù)據(jù)了,不能再重新創(chuàng)建新表了。了解Django的表明和models名稱的映射關(guān)系就可以讓Django使用已經(jīng)存在的表。
假如在Django存在models如下:
view plain copy
from django.db import models
# Create your models here.
class Sciencenews(models.Model):
id = models.CharField(max_length=36,primary_key=True)
first_module = models.CharField(max_length=30,default=”News”)
second_module = models.CharField(max_length=30,default=”Latest News”)
title = models.CharField(max_length=300)
author = models.CharField(max_length=60,null=True)
publish_date = models.CharField(max_length=35,null=True)
content = models.TextField(null=True)
crawl_date = models.CharField(max_length=35,null=True)
from_url = models.CharField(max_length=350,null=True)
執(zhí)行數(shù)據(jù)遷移命令:
view plain copy
python manage.py makemigration
python manage.py migrate
會(huì)在數(shù)據(jù)庫中生成名稱為show_sciencenews的數(shù)據(jù)表。show為應(yīng)用名稱,此處我的應(yīng)用名稱為show??梢钥吹紻jango創(chuàng)建表的命名規(guī)則:應(yīng)用名_模型名。
關(guān)于django數(shù)據(jù)庫設(shè)計(jì),雙表互為外鍵
數(shù)據(jù)庫設(shè)計(jì)是整個(gè)設(shè)計(jì)最基礎(chǔ)的部分
1、django app的設(shè)計(jì):根據(jù)系統(tǒng)的需求分析來設(shè)計(jì)django的app,django的開發(fā)是基于app來開發(fā)的,所以之一步就是設(shè)計(jì)app。
2、各app model 的設(shè)計(jì):也就是設(shè)計(jì)對(duì)應(yīng)的數(shù)據(jù)表
3、數(shù)據(jù)表的生成以及修改
使用在線教育系統(tǒng)作為實(shí)例:
userprofile的設(shè)計(jì):在任何一個(gè)系統(tǒng)中,user表都是之一個(gè)被設(shè)計(jì)的,django會(huì)產(chǎn)生幾個(gè)默認(rèn)用戶數(shù)據(jù)表
在設(shè)計(jì)我們自己的user表的時(shí)候,我們希望能生成自己的表又希望能夠繼承django的默認(rèn)表,此時(shí),我們可以繼承AbstractUser(
from django.contrib.auth.models import AbstractUser
)
class UserProfile(AbstractUser):
pass
定義完UserProfile表之后,我們需要在setting.py文件中注冊(cè)u(píng)sers app,INSTALLED_APPS =
‘users’,
>
并且定義一個(gè)方法AUTH_USER_MODEL = “users.UserProfile”,注意這里是使用users.UserProfile而不是users.model.UserProfile
(1)user model的設(shè)計(jì):
我們?cè)谠O(shè)計(jì)django app的時(shí)候,每個(gè)app中都有model,model文件中很有可能用到其他app文件當(dāng)中的model,這就會(huì)很容易引入循環(huán)引用的問題,為了解決這個(gè)問題,很常用的一種方法就是使用分層model的方法,也就是上一層可以引用下一層
的model,如下:
注:PEP8的在引入的規(guī)范是之一個(gè)區(qū)域是導(dǎo)入Python自帶的包,然后隔一行的第二個(gè)區(qū)域是第三方的包,如django,然后隔一行的第三個(gè)區(qū)域是我們自己定義的一些model
(2)course model 的編寫:一個(gè)數(shù)據(jù)可能和另一個(gè)數(shù)據(jù)是一對(duì)多的關(guān)系,但是一張表存儲(chǔ)不了這種關(guān)系,所以就需要把這兩個(gè)數(shù)據(jù)分別存儲(chǔ)在不同的數(shù)據(jù)表當(dāng)中,這樣就會(huì)引入外鍵的關(guān)系。
model的FileFIield,定義了這個(gè)字段就可以在后臺(tái)系統(tǒng)中生成上傳文件的按鈕
(3)oganization model的編寫:
(4)operation的model編寫:
所有的APP編寫完成之后,我們可以建立Python的apps包,把所有的app都放到這個(gè)apps中,把所有的APP放到apps之后,會(huì)發(fā)現(xiàn)各個(gè)app的model的引用可能會(huì)出現(xiàn)紅線,說明我們找不到這些引用的包,所以需要我們?cè)趕etting.py文件當(dāng)中
把a(bǔ)pps加入Python的搜索目錄之下,
import syssys.path.insert(0, os.path.join(BASE_DIR, ‘a(chǎn)pps’))
關(guān)于django 數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
當(dāng)前題目:Django的數(shù)據(jù)庫連接及操作(django數(shù)據(jù)庫)
分享URL:http://fisionsoft.com.cn/article/cdoijjs.html


咨詢
建站咨詢
