日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Django的數(shù)據(jù)庫連接及操作(django數(shù)據(jù)庫)

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ù)器等。


網(wǎng)站標(biāo)題:Django的數(shù)據(jù)庫連接及操作(django數(shù)據(jù)庫)
文章出自:http://www.dlmjj.cn/article/cdoijjs.html