APCu 極簡概括: PHP 的開源記憶體緩存擴展,類比Redis,但是一般都用Redis,所以APCu用的很少。 官方文檔:https://www.php.net/manual/zh/apcu.configuration.php 解決問題:類比Redis做緩存組件,提升性能,同步數據使用。 適用場景 ...
ORM(Object Relational Mapping)是對象-關係-映射的簡稱。
ORM是MVC框架中的重要的部分。它實現了數據模型與資料庫的解耦,即數據模型的設計不需要依賴於特定的資料庫,通過簡單的配置就可以輕鬆更換資料庫,這極大的減輕了開發人員的工作量
在ORM中,有三種對應關係:
- 類對應表
- 類屬性對應表欄位
- 類對象對應表記錄
如何在Django中使用ORM
-
1.創建對象映射關係,即創建模型類,其實就是在app下的models.py中,以類和屬性的形式定義表的欄位
models.pyfrom django.db import models class User(models.Model): username = models.CharField(max_length=32, verbose_name='用戶名') # 當輸出對象時候自動輸出相應對象(記錄)的用戶名【純是輸出對象為了好看哈哈哈】 def __str__(self): return self.username
-
2.配置資料庫連接,並且有了關係映射關係,這個時候就可以通過命令在資料庫中生成具體表了
db.sqlite3配置
dj.sqlite3是django中的集成資料庫,在settings中配置好的,適合測試環境用【適用於數據量小的時候】DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
mysql配置
首先安裝用於連接mysql的模塊pip install pymysql
然後添加配置,在與項目同名目錄中的__init__.py添加以下代碼
import pymysql pymysql.install_as_MySQLdb()
接下來,就需要手動在mysql中手動創建資料庫啦
然後,連接mysql還需要再Django中的settings中配置一下DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day07', #你的資料庫名稱 'USER': 'root', #你的資料庫用戶名 'PASSWORD': '123', #你的資料庫密碼 'HOST': '', #你的資料庫主機,留空預設為localhost 'PORT': '3306', #你的資料庫埠 } }
由於ORM會將ORM語句轉換成原生sql語句,可能有些SQL不符合我們的預期,所以這個日誌配置,用來查看 ORM到底將語句轉換成什麼,方便我們排查
如果想查看ORM轉換為的sql語句,可以在settings中配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
也可以為每個app單獨配置資料庫,可以在settings中配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要連接的資料庫,連接前需要創建好 'USER':'root', # 連接資料庫的用戶名 'PASSWORD':'', # 連接資料庫的密碼 'HOST':'127.0.0.1', # 連接主機,預設本級 'PORT':3306 # 埠 預設3306 }, 'app01': { #可以為每個app都配置自己的數據,並且資料庫還可以指定別的,也就是不一定就是mysql,也可以指定sqlite等其他的資料庫 'ENGINE': 'django.db.backends.mysql', 'NAME':'bms', # 要連接的資料庫,連接前需要創建好 'USER':'root', # 連接資料庫的用戶名 'PASSWORD':'', # 連接資料庫的密碼 'HOST':'127.0.0.1', # 連接主機,預設本級 'PORT':3306 # 埠 預設3306 }
}
- 3.資料庫遷移,只需要執行兩個命令就可以
上述命令會將所有的APP(settings中的INSTALLED_APPS中的app)中的models.py的映射類,真正的在數 據庫中創建相應的表。但是也可能有失敗的時候,那麼我們就要強制執行資料庫遷移命令:python manage.py makemigrations # 用來讀取你在modesl.py中的類和屬性,創建資料庫的映射關係【生成文件】 python manage.py migrate # 讀取映射關係文件,在資料庫中生成相應的表
上述操作,僅適用於連接mysqlpython manage.py migrate your_app_name --database your_app_name
註意點- Django為了區分某個表屬於某個應用,創建的表都是以應用名加下劃線加表名的形式,如上述的UserInfo表,Django會創建成app01_userinfo