1. 程式人生 > >DjangoORM使用MySQL應注意

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