日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django从理论到实战(part26)--ORM模型

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django从理论到实战(part26)--ORM模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,僅供參考

參考自:Django打造大型企業官網–Huang Y;

本系列Blog以應用為主,理論基礎部分我在后端專欄的Django系列博客已經寫過了,如果有些需要補充的知識點,我會在這個系列中,盡量詳細的記錄一下。


ORM模型


ORM模型介紹


ORM,全稱Object Relational Mapping,中文叫做對象關系映射,通過ORM我們可以通過的方式去操作數據庫,而不用再寫原生的SQL語句。通過把表映射成類,把行作實例,把字段作為屬性,ORM在執行對象操作的時候,最終還是會把對應的操作轉換為數據庫原生sql語句。


創建ORM模型


ORM模型一般放在app的models.py文件中,每個app都可以擁有自己的模型,并且如果這個模型想要映射到數據庫中,那么這個app必須要在settings.py的INSTALLED_APP中進行安裝,下面是一個書籍ORM模型:

from django.db import models class Book(models.Model):name = models.CharField(max_length=20,null=False)author = models.CharField(max_length=20,null=False)pub_time = models.DateTimeField(default=datetime.now)price = models.FloatField(default=0)

上面這個模型繼承自django.db.models.Model類,如果這個模型想要映射到數據庫中,就必須繼承自這個類。

當這個模型映射到數據庫中時,表名是模型名稱的小寫形式(book),在這個表中,有四個字段,一個為name,該字段保存書的名稱,是varchar類型,最長不能超過20個字符,并且不能為空;第二個字段為作者姓名,同樣也是varchar類型,長度不能超過20個;第三個為出版時間,是datetime類型,默認是保存這本書籍的時間;第五個字段是這本書的價格,為浮點類型。
還有一個字段為主鍵id,在django中,如果一個模型沒有定義主鍵,那么將會自動生成一個自動增長的int類型的主鍵,并且這個主鍵的名字就叫做id。


映射模型到數據庫中


下面我們用案例,學習一下這個知識點。


  • 創建數據庫
create database mynewbook default charset utf8 collate utf8_general_ci;
  • 創建新項目
django-admin startproject newbookstore1
  • 創建新的應用
python manage.py startapp bookstore
  • 在settings.py中,配置DATABASES和INSTALLED_APPS
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','bookstore', ]DATABASES = {'default': {# 數據庫引擎(是mysql還是oracle等)'ENGINE': 'django.db.backends.mysql',# 數據庫的名字'NAME': 'mynewbook',# 連接mysql數據庫的用戶名'USER': 'root',# 連接mysql數據庫的密碼'PASSWORD': '19970928',# mysql數據庫的主機地址'HOST': '127.0.0.1',# mysql數據庫的端口號'PORT': '3306',}, }
  • 在app的models.py中定義模型,該模型必須繼承自django.db.models
from django.db import models# Create your models here.class Book(models.Model):#定義一個自增長的主鍵bookid = models.AutoField(primary_key = True)name = models.CharField(max_length=20,null=False)author = models.CharField(max_length=20,null=False)price = models.FloatField(default=0)
  • 遷移

在cmd終端內,進入到項目所在的路徑,執行命令python manage.py makemigrations,生成遷移腳本文件:

python manage.py makemigrations #輸出 Migrations for 'bookstore':bookstore\migrations\0001_initial.py- Create model Book

在執行完上述代碼后,Django為我們生成了一個遷移腳本0001_initial.py,我們去看看里面都有啥:

from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = []operations = [migrations.CreateModel(name='Book',fields=[('bookid', models.AutoField(primary_key=True, serialize=False)),('name', models.CharField(max_length=20)),('author', models.CharField(max_length=20)),('price', models.FloatField(default=0)),],),]

之后,當我們調用python manage.py migrate時,Django就會根據遷移腳本中的這些代碼,映射到數據庫中。


執行命令python manage.py migrate,將遷移腳本文件映射到數據庫中:

python manage.py migrate #輸出 Operations to perform:Apply all migrations: admin, auth, bookstore, contenttypes, sessions Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying admin.0003_logentry_add_action_flag_choices... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying auth.0009_alter_user_last_name_max_length... OKApplying auth.0010_alter_group_name_max_length... OKApplying auth.0011_update_proxy_permissions... OKApplying bookstore.0001_initial... OKApplying sessions.0001_initial... OK

我們看到Django幫我們生成了許多數據表,這是由于Django存在很多內置的應用,它們內部也有models.py模型文件,當我們第一次進行遷移時,Django就會生成與這些模型對應的數據表。


現在,我們查看mynewbook數據庫中的數據表:

mysql> use mynewbook; Database changed mysql> show tables; +----------------------------+ | Tables_in_mynewbook | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | bookstore_book | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 11 rows in set (0.00 sec)

再查看一下 bookstore_book表的描述信息:

mysql> desc bookstore_book; +--------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+----------------+ | bookid | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | author | varchar(20) | NO | | NULL | | | price | double | NO | | NULL | | +--------+-------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec)

可以看到,這和我們在models.py中設定的完全相同。

總結

以上是生活随笔為你收集整理的Django从理论到实战(part26)--ORM模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。