數(shù)據(jù)庫(kù)配置
根目錄下settings.py 。這是個(gè)包含了 Django 項(xiàng)目設(shè)置的 Python 模塊。
通常,這個(gè)配置文件使用 SQLite 作為默認(rèn)數(shù)據(jù)庫(kù)。如果你不熟悉數(shù)據(jù)庫(kù),或者只是想嘗試下 Django,這是最簡(jiǎn)單的選擇。Python 內(nèi)置 SQLite,所以你無(wú)需安裝額外東西來(lái)使用它。
文件頭部的 INSTALLED_APPS 設(shè)置項(xiàng)。這里包括了會(huì)在你項(xiàng)目中啟用的所有 Django 應(yīng)用。應(yīng)用能在多個(gè)項(xiàng)目中使用,你也可以打包并且發(fā)布應(yīng)用,讓別人使用它們。
通常, INSTALLED_APPS 默認(rèn)包括了以下 Django 的自帶應(yīng)用:
django.contrib.admin – 管理員站點(diǎn), 你很快就會(huì)使用它。
django.contrib.auth – 認(rèn)證授權(quán)系統(tǒng)。
django.contrib.contenttypes – 內(nèi)容類(lèi)型框架。
django.contrib.sessions – 會(huì)話框架。
django.contrib.messages – 消息框架。
django.contrib.staticfiles – 管理靜態(tài)文件的框架。
創(chuàng)建數(shù)據(jù)庫(kù)表
python manage.py migrate
創(chuàng)建模型
在 Django 里寫(xiě)一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的 Web 應(yīng)用的第一步是定義模型 - 也就是數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)和附加的其它元數(shù)據(jù).
在這個(gè)投票應(yīng)用中,需要?jiǎng)?chuàng)建兩個(gè)模型:?jiǎn)栴} Question 和選項(xiàng) Choice。Question 模型包括問(wèn)題描述和發(fā)布時(shí)間。Choice 模型有兩個(gè)字段,選項(xiàng)描述和當(dāng)前得票數(shù)。每個(gè)選項(xiàng)屬于一個(gè)問(wèn)題。
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
每個(gè)模型被表示為 django.db.models.Model 類(lèi)的子類(lèi)。每個(gè)模型有許多類(lèi)變量,它們都表示模型里的一個(gè)數(shù)據(jù)庫(kù)字段。
每個(gè)字段都是 Field 類(lèi)的實(shí)例 - 比如,字符字段被表示為 CharField ,日期時(shí)間字段被表示為 DateTimeField 。這將告訴 Django 每個(gè)字段要處理的數(shù)據(jù)類(lèi)型。
創(chuàng)建數(shù)據(jù)庫(kù)表
makemigrations 命令,Django 會(huì)檢測(cè)你對(duì)模型文件的修改,并且把需改的部分儲(chǔ)存為一次遷移。
migrate 命令,在數(shù)據(jù)庫(kù)里創(chuàng)建新定義的模型的數(shù)據(jù)表:
$ python manage.py makemigrations polls
$ python manage.py migrate
改變模型需要這三步:
編輯 models.py 文件,改變模型。
運(yùn)行 python manage.py makemigrations 為模型的改變生成遷移文件。
運(yùn)行 python manage.py migrate 來(lái)應(yīng)用數(shù)據(jù)庫(kù)遷移。
打開(kāi)db.sqlite3可以看到創(chuàng)建的數(shù)據(jù)庫(kù)和表。
數(shù)據(jù)庫(kù)API
https://docs.djangoproject.com/zh-hans/4.2/topics/db/queries/
進(jìn)入交互式 Python 命令行
$ python manage.py shell
manage.py 會(huì)設(shè)置 DJANGO_SETTINGS_MODULE 環(huán)境變量,這個(gè)變量會(huì)讓 Django 根據(jù) mysite/settings.py 文件來(lái)設(shè)置 Python 包的導(dǎo)入路徑。
objects.all()方法返回對(duì)象的__str__內(nèi)容,可以看到在無(wú)數(shù)據(jù)時(shí)返回的是空
創(chuàng)建對(duì)象q后,使用q.save()保存對(duì)象
q.id獲取對(duì)象的id
q.question_text獲取對(duì)象的字段值
ORM映射
在 Django 中,ORM(對(duì)象關(guān)系映射)是一種將數(shù)據(jù)庫(kù)表映射到 Python 對(duì)象的技術(shù)。Django 的 ORM 提供了簡(jiǎn)單而強(qiáng)大的方式來(lái)與數(shù)據(jù)庫(kù)進(jìn)行交互,而無(wú)需編寫(xiě)原始的 SQL 查詢語(yǔ)句。下面是 Django ORM 的映射示例:
- 定義模型類(lèi):在 Django 中,模型類(lèi)表示數(shù)據(jù)庫(kù)中的表,每個(gè)模型類(lèi)都是一個(gè) Python 類(lèi),它繼承自
django.db.models.Model
。
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publication_date = models.DateField()
上面的代碼定義了一個(gè)名為 Book
的模型類(lèi),包含了 title
、author
和 publication_date
三個(gè)字段。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-672920.html
- 執(zhí)行數(shù)據(jù)庫(kù)遷移:在定義完模型類(lèi)后,需要運(yùn)行 Django 的數(shù)據(jù)庫(kù)遷移命令來(lái)創(chuàng)建對(duì)應(yīng)的表結(jié)構(gòu)。
python manage.py makemigrations # 創(chuàng)建遷移文件
python manage.py migrate # 應(yīng)用遷移文件,創(chuàng)建數(shù)據(jù)庫(kù)表
- CRUD 操作:一旦模型類(lèi)和數(shù)據(jù)庫(kù)表創(chuàng)建完畢,就可以使用 Django 的 ORM 來(lái)進(jìn)行數(shù)據(jù)庫(kù)的增刪改查操作了。例如:
# 創(chuàng)建一本書(shū)
book = Book(title='Django ORM Guide', author='John Doe', publication_date='2023-01-01')
book.save()
# 查詢所有的書(shū)籍
books = Book.objects.all()
# 根據(jù)條件查詢書(shū)籍
book = Book.objects.get(title='Django ORM Guide')
# 更新書(shū)籍信息
book.title = 'Updated Title'
book.save()
# 刪除一本書(shū)
book.delete()
以上是 Django ORM 的基本映射和使用示例,ORM 還提供了更多高級(jí)的查詢和操作方式,如過(guò)濾查詢、關(guān)聯(lián)查詢、聚合函數(shù)等。可以參考 Django 官方文檔來(lái)了解更多詳細(xì)信息:https://docs.djangoproject.com/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-672920.html
到了這里,關(guān)于Django(3)-創(chuàng)建第一個(gè)數(shù)據(jù)模型-ORM映射的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!