DjangoORM使用MySQL應注意
django 預設使用sqlite3 資料庫 資料都寫入到這個資料庫
我們可以不使用預設的sqlite 換成mysql
程式碼不用動,只要改django的setting.py 配置就可以
如圖 下面配置預設是sqlite
mysql 資料庫配置
注意:
'NAME' :資料庫名 django不會幫你建立,要自己去mysql 上面建立資料庫先
例如:設定 'NAME': db10
DATABASES = { 'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':'dbname', 'USER': 'root', 'PASSWORD': 'xxx', 'HOST': '', 'PORT': '', } }
HOST = ip PORT =埠 password= 密碼
把這份配置 替換預設 sqlite配置
# 由於Django內部連線MySQL時使用的是MySQLdb模組,而python3中還無此模組,所以需要使用pymysql來代替
# 如下設定放置的與project同名的配置的 __init__.py檔案中
import pymysql pymysql.install_as_MySQLdb()
現在我用centos準備一臺mysql伺服器 利用django去連上他
mysql伺服器地址192.168.0.109
上面的資料庫 建立一個db1資料庫
mysql> create database db1 charset=utf8; Query OK,1 row affected (0.13 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec)
django setting配置
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'db1', 'USER': 'root', 'PASSWORD': '123', 'HOST': '192.168.0.109', 'PORT': '3306', } }
執行django專案
啟動django後 再看資料庫 db1 的表發現 多了django資料表
證明連上mysql了
mysql> use db1; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------+ | Tables_in_db1 | +-------------------+ | django_migrations | +-------------------+ 1 row in set (0.01 sec)
然後我在cmdb專案 寫上一個類 現在讓django自動建立資料庫表
models.py 配置
from django.db import models # Create your models here. # 必須繼承 class UserInfo(models.Model): # django預設隱藏著會幫你建立 一列id列 自增的,設定為主鍵,參考mysql # 使用者名稱列,資料型別 字串型別,指定長度 username = models.CharField(max_length=32) password = models.CharField(max_length=64)
在專案目錄執行這個命令
C:\Users\Administrator.QH-20170325TNQR\PycharmProjects\SSSSS\SS\day19\web 框架 django\s18django>python manage.py ma
kemigrations
如果出現 no changes detected 看這帖子
DjangoORM 執行 python manage.py makemigrations出現 no changes detected
這個檔案記錄著資料庫表結構資料
0001_initial.py
執行 python manage.py makemigrations 生成001_install.py
接下來執行 python manage.py migrate
會根據剛才生成的001_install.py 生成資料庫
python manage.py migrate
現在資料庫已經有這個表了
C:\Users\Administrator.QH-20170325TNQR\PycharmProjects\SSSSS\SS\day19\web 框架 django\s18django>python manage.py mi
grate
Operations to perform:
Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial...
再看線上mysql伺服器
mysql> show tables; +----------------------------+ | Tables_in_db1 | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | cmdb_userinfo | | django_admin_log | | django_content_type | | django_migrations | | django_session | +----------------------------+ 11 rows in set (0.00 sec)
表名叫cmdb_userinfo
from django.db import models # Create your models here. # 必須繼承 # 表名叫cmdb_userinfo class UserInfo(models.Model): # django預設隱藏著會幫你建立 一列id列 自增的,設定為主鍵,參考mysql # 使用者名稱列,資料型別 字串型別,指定長度 username = models.CharField(max_length=32) password = models.CharField(max_length=64)
總結:
生成一個臨時檔案
python manage.py makemigrations
根據臨時檔案生成資料庫表
python manage.py migrate