Django之模型层和ORM
Django連接mysql數據庫,安裝mysqlclient[版本mysqlclient 1.3.13以上],如果是ubantu要確定是否安裝python3-dev,default-libmysqlclient-dev,系統級別必須有這兩個包,可以通過如下命令查看
那如果是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應用
接著注冊應用
INSTALLED_APPS = [...'news','bookstore', ]在bookstore應用下models.py中
此時并沒有數據表 book
mysql> use mysite3; Database changed mysql> show tables;2.1 數據庫遷移
創建mysite3數據庫和Book數據表類之后,在數據庫中并沒有表實際生成,此時需要進行數據庫遷移。所謂“遷移”就是Django同步對模型所做的一切操作到數據庫的方式,有兩步:
報錯如下所示:
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文件夾
如下所示:
Applying bookstore.0001_initial... OK執行遷移程序,將每個應用下的migrations文件夾中的文件同步到數據庫中。在cmd下再次執行
mysql> show tables;
這里我們發現生成的表名為:應用名_類名(小寫)
因此創建模型類的流程歸納如下:
因此安裝上述的方式,再添加一個info屬性
經過上述練習之后,發現創建模型類的關鍵現在是屬性中字段類型的選擇及其描述信息,那有哪些屬性呢?
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django值应用和分布式路由
- 下一篇: linux之awk命令解读