之前做Ubike ETL系統時(用python抓取ubike開放資料),使用MySQL當作資料庫,用MySQLdb這個套件下SQL連接MySQL。可是如果要套一些套件,如Django Endless Pagination,就會出問題。因為資料需要建立Django Model,而直接下SQL撈出來的資料,沒辦法讓套件做自動分頁。因此同時有原生SQlite與自己建立的MySQL兩個資料庫,不是好的做法,應該要更改Django資料庫設定。


下載並安裝MySQLdb

安裝必要的develop package

$ sudo apt-get install libmysqlclient-dev python-dev

安裝MySQLdb

$ pip install MySQL-python

修改settings.py設定

# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'data',                       # Or path to database file if using sqlite3.
        'USER': 'user',                       # Not used with sqlite3.
        'PASSWORD': 'password',               # Not used with sqlite3.
        'HOST': '',                           # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                           # Set to empty string for default. Not used with sqlite3.
    }
}

將原有的MySQL資料轉換成Model

如果開發到一半才將資料庫轉成MySQL,或是在Django中想要使用MySQL中的資料表,就必須在Model中寫好資料格式。但是已經建好表,要一個一個寫進Model起不是很麻煩?好在Django有個貼心功能,使用inspectdb就能把資料格式都匯入進Model囉!

顯示轉換後的Model內容

$ python manage.py inspectdb

將資料格式寫入Model.py

$ python manage.py inspectdb > models.py

參考資料

python Django 学习笔记(四)—— 使用MySQL数据库

Import MySQL tables into Django