用 Python 寫資料庫程式,預設是以 ORM 的方式存取,這裡簡單的記錄如下:
- 安裝資料庫的驅動程式
我用的資料庫是 MySQL,在繼續寫程式前,要先安裝 MySQL 的驅動程式,指令如下:
- 修改 settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo',
]
在 settings.py 中找到 INSTALLED_APPS,將剛剛建立的 demo application 加入,接下找到 DATABASES,如下輸入:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Demo',
'USER': 'myuser',
'PASSWORD': 'p@ssw0rd',
'HOST': '192.168.0.103',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
這個 table 裡的欄位就如類別中定義的一樣,有 name 和 country,python 會自行加入一個自動編號的欄位當 key。
python manage.py makemigrations 是用來建立資料庫和 Django 間的中介檔案。
python manage.py migrate 則是同步更新資料庫的內容。
- 測試
我先在剛剛建立的 table 中新增一筆資料,如下:
insert into demo_maker(name, country)
values('ASUS', 'Taiwan');
接著寫單元測試程式,將它查詢出來 … 修改 tests.py,如下:
from django.test import TestCase
import MySQLdb
import unittest
class DbTestCase(unittest.TestCase):
def test_query(self):
db = MySQLdb.connect(host="192.168.0.103", user="myuser", passwd="p@ssw0rd", db="demo")
cursor = db.cursor()
cursor.execute("select * from demo_maker")
results = cursor.fetchall()
for record in results:
col0 = record[0]
col1 = record[1]
col2 = record[2]
print(col0, col1, col2)
db.close()
很簡單的查詢後輸出到 console,看看是否正確 ... 測試的方式