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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Django之模型层和ORM

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django之模型层和ORM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在之前的文章中已經介紹過數據庫的操作使用,但是不夠系統,今天就模型層和ORM做一個系統的介紹。所謂模型層就是主要負責和數據庫之間進行數據交互的一個模塊


Django連接mysql數據庫,安裝mysqlclient[版本mysqlclient 1.3.13以上],如果是ubantu要確定是否安裝python3-dev,default-libmysqlclient-dev,系統級別必須有這兩個包,可以通過如下命令查看

sudo apt list --installed|grep -E 'libmysqlclient-dev|python3-dev' #如果沒有,則安裝 sudo apt-get install python3-dev default-libmysqlclient-dev #接著安裝 sudo pip install mysqlclient sudo pip freeze|grep -i 'mysql'


那如果是windows下,需要先安裝mysql服務,網上可以直接下載,接著pip install pymysql
那pymysql和mysqlclient有何區別呢?MySQLdb只支持python 2.x 版本,mysqlclient 是MySQLdb的一個分支,解決了python 3.x 的兼容問題。

  • mysqlclient

    1)是一個C擴展模塊,編譯安裝可能會導致報各種錯誤,明顯沒有pymysql方便

    2)速度快;

  • 2.pymysql

    1)純Python實現的,安裝簡單(直接pip安裝)2) 由于純Python實現的,可以很好的跟gevent框架結合

    本地的環境是windows10,使用的python3,安裝好mysql服務(下載mysql直接安裝即可),安裝完成pymysql后

    1.數據庫的創建

    進入到mysql數據庫,執行如下命令

    create database 數據庫名 default charset utf8 #通常數據庫名和項目名稱一致

    這里我們先創建一下數據庫

    mysql> create database mysite3 default charset utf8; ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysite3'

    cmd使用管理員權限也不行,先做一下登錄。

    C:\WINDOWS\system32>mysql -u root -p Enter password: ****** mysql> create database mysite3 default charset utf8; Query OK, 1 row affected (0.20 sec) mysql> show databases;

    在setttings.py中DATABASE配置如下,指明連接的數據庫是mysql

    DATABASES = {'default': {# 'ENGINE': 'django.db.backends.sqlite3',# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),'ENGINE': 'django.db.backends.mysql','NAME':'mysite3','USER':'root','PASSWORD':'123456','HOST':'127.0.0.1','PORT':'3306',} }

    2.模型

    模型是一個Python類,它是由django.db.models.Model派生出的子類,且有一些關系:

    • 一個模型類代表數據庫中的一張數據表
    • 模型類中每個類屬性代表數據庫中的一個字段
    • 模型是數據交互的接口,是表示和操作數據庫的方法和方式
      ORM框架(Object Relational Mapping)即關系對象映射,它是一種程序技術,允許使用類和對象對數據庫進行操作,從而避免通過SQL語句操作數據庫,其優缺點在這里不再贅述。
      那ORM到底是何方神圣,這里使用是應用專門介紹。創建bookstore應用
    F:\Django\DjangoStudy\mysite3>django-admin startapp bookstore

    接著注冊應用

    INSTALLED_APPS = [...'news','bookstore', ]

    在bookstore應用下models.py中

    from django.db import models# Create your models here. class Book(models.Model):title = models.CharField('書名',max_length=50,default='')price = models.DecimalField('價格',max_digits=7,decimal_places=2)

    此時并沒有數據表 book

    mysql> use mysite3; Database changed mysql> show tables;

    2.1 數據庫遷移

    創建mysite3數據庫和Book數據表類之后,在數據庫中并沒有表實際生成,此時需要進行數據庫遷移。所謂“遷移”就是Django同步對模型所做的一切操作到數據庫的方式,有兩步:

  • 生成遷移文件-執行
  • python manage.py makemigrations

    報錯如下所示:

    File "C:\Python36\lib\site-packages\django\db\backends\utils.py", line 103, in executesql = self.db.ops.last_executed_query(self.cursor, sql, params)File "C:\Python36\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_queryquery = query.encode(errors='replace') AttributeError: 'bytes' object has no attribute 'encode'

    找到該文件,將line146中encode修改為decode。再次運行:

    F:\Django\DjangoStudy\mysite3>python manage.py makemigrations Migrations for 'bookstore':bookstore\migrations\0001_initial.py- Create model Book

    將models.py文件生成一個中間文件,并保持在migrations文件夾

  • 執行遷移腳本,執行
  • python manage.py migrate

    如下所示:

    Applying bookstore.0001_initial... OK

    執行遷移程序,將每個應用下的migrations文件夾中的文件同步到數據庫中。在cmd下再次執行

    mysql> show tables;


    這里我們發現生成的表名為:應用名_類名(小寫)

    mysql> desc bookstore_book;


    因此創建模型類的流程歸納如下:

  • 安裝mysql程序,并創建數據庫,mysql> create database mysite3 default charset utf8;
  • 創建應用并注冊
  • 在應用下的models.py中創建模型類
  • from django.db import models # Create your models here. class 類名(models.Model):字段名(或者叫屬性名)= models.字段類型(字段選項)
  • 數據遷移使用python manage.py makemigrations&migrate
    因此安裝上述的方式,再添加一個info屬性
  • from django.db import models# Create your models here. class Book(models.Model):...info = models.CharField('描述',max_length=100,default='')


    經過上述練習之后,發現創建模型類的關鍵現在是屬性中字段類型的選擇及其描述信息,那有哪些屬性呢?

    2.2 模型類-字段類型

    • BooleanField()
      數據庫類型:tinyint(1)
      編程語言中:使用True或False來表示值,數據庫存放的是1或者0

    • CharField()
      數據可類型為:varchar
      注意: 必須要助興max_length參數

    • DateField()
      數據庫類型:date
      作用:表示日期
      參數:
      auto_now:每次保存對象時,自動設置該字段為當前時間(取值:True/False)
      auto_now_add:當對象每一次被創建時自動設置當前時間(取值:True/False)
      default:設置當前(取值:字符串格式時間如:‘2021-9-1’)
      注意: 以上三個參數只能選擇一個

    • DateTimeFiled()
      參數類型:datetime(6)
      作用:表示日期和時間
      參數通DateField

    • FloagField()
      數據類型:double
      編程語言中和數據庫中都使用小數標識值

    • DecimalField()
      數據庫類型:decimal(x,y)
      編程語言中:使用小數表示該列的值,在數據庫中使用小數表示
      參數:
      max_digits:位數總數,包括小數點后的位數,該值必須待遇等于decimal_places,decimal_places為小數點后的數字量

    總結

    以上是生活随笔為你收集整理的Django之模型层和ORM的全部內容,希望文章能夠幫你解決所遇到的問題。

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