settings 配置 + 測試環境搭建
若想將模型轉為mysql資料庫中的表,需要在settings中配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'lqz', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, 'ATOMIC_REQUEST': True, 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } } } ''' 'NAME':要連線的資料庫,連線前需要建立好 'USER':連線資料庫的使用者名稱 'PASSWORD':連線資料庫的密碼 'HOST':連線主機,預設本機 'PORT':埠 預設3306 'ATOMIC_REQUEST': True, 設定為True統一個http請求對應的所有sql都放在一個事務中執行(要麼所有都成功,要麼所有都失敗)。 是全域性性的配置, 如果要對某個http請求放水(然後自定義事務),可以用non_atomic_requests修飾器 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } 設定建立表的儲存引擎為MyISAM,INNODB '''
注意1:NAME即資料庫的名字,在mysql連線前該資料庫必須已經建立,而上面的sqlite資料庫下的db.sqlite3則是專案自動建立 USER和PASSWORD分別是資料庫的使用者名稱和密碼。設定完後,再啟動我們的Django專案前,我們需要啟用我們的mysql。然後,啟動專案,會報錯:no module named MySQLdb 。這是因為django預設你匯入的驅動是MySQLdb,可是MySQLdb 對於py3有很大問題,所以我們需要的驅動是PyMySQL 所以,我們只需要找到專案名檔案下的__init__,在裡面寫入:
importpymysql pymysql.install_as_MySQLdb()
最後通過兩條資料庫遷移命令即可在指定的資料庫中建立表 :
python manage.py makemigrations
python manage.py migrate
注意2:確保配置檔案中的INSTALLED_APPS中寫入我們建立的app名稱
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', "book" ]
注意3:如果報錯如下:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None
MySQLclient目前只支援到python3.4,因此如果使用的更高版本的python,需要修改如下:
通過查詢路徑C:\Programs\Python\Python36-32\Lib\site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql
這個路徑裡的檔案把
if version < (1, 3, 3): raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)
註釋掉就可以了
注意4: 如果想列印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', }, } }
增加,刪除欄位:
刪除,直接註釋掉欄位,執行資料庫遷移命令即可
新增欄位,在類裡直接新增欄位,直接執行資料庫遷移命令會提示輸入預設值,此時需要設定
publish = models.CharField(max_length=12,default='人民出版社',null=True)
注意:
1 資料庫遷移記錄都在 app01下的migrations裡
2 使用showmigrations命令可以檢視沒有執行migrate的檔案
3 makemigrations是生成一個檔案,migrate是將更改提交到資料量