Django中使用mysql資料庫並使用原生sql語句操作
阿新 • • 發佈:2018-11-01
Django自身預設使用sqlite3
這個輕量級的資料庫,但是當我們開發網站時,sqlite3
就沒有mysql
好,sqlite3
適合一些手機上開發使用的資料庫。
準備的軟體
- mysql資料庫,版本5.7及以上。
- navicat,(可選的)。使用navicat主要是簡化我們對資料庫的操作。沒有也一樣。
- 安裝mysql驅動程式。
常見的驅動程式:
a. MySQL-python
:也就是MySQLdb,是對c語言操作資料庫的一個簡單封裝。遵循了Python DB API v2,但是隻支援python2,目前還不支援python3.
b. mysqlclient
c. pymysql
:純python實現的一個驅動,因為是純python編寫的,因此效率不如MySQL-python,並且也是因為是純python編寫的,因此可以和python無縫銜接。
d. MySQL Connecter/Python
:MySQL官方推出的使用純python連線MySQL的驅動。因為是純python開發的,效率也不高,但能無縫銜接。
還有很多就不介紹了。
因為我使用的時python3,所以我使用的是mysqlclient
安裝驅動的方式:
pip install mysqlclient
Django中連線MySQL資料庫
在專案中的settings.py檔案中,修改DATABASES這個字典中的資料:
原來的程式碼為
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
修改為
DATABASES = {
'default': {
#資料庫引擎
'ENGINE': 'django.db.backends.mysql',
#資料庫的名字
'NAME': 'test',
#連線資料庫的使用者名稱
'USER': 'root',
#連線資料庫的密碼(下載mysql時配置的密碼)
'PASSWORD': 'root',
#資料庫的主機地址
'HOST':'127.0.0.1',
#資料庫的埠號,預設為3306,也可以不寫這一行程式碼
'PORT':'3306'
}
}
這樣就能連線到資料庫了,就能對資料庫進行操作了。
在Django中操作資料庫
在Django中操作資料庫的方式有兩種,第一種就是使用原生sql語句操作,第二種就是使用ORM模型來操作。
原生sql語句操作資料庫
首先使用navicat連線了mysql資料庫,新建一個test的資料庫。然後在test中新建一個book
的表,有三個值id
(主鍵,自動增長),name
,author
。
如果沒有navicat的就是用sql語句建立上述資訊。
新建一個專案,配置好settings.py中的資訊並且能連線上資料庫,在settings.py的同級目錄下新建一個views.py
的檔案,templates資料夾下新建一個index.html
的檔案。
views.py中寫入:
from django.shortcuts import render
#匯入`connection`
from django.db import connection
def index(request):
cursor = connection.cursor()
#要想使用sql原生語句,必須用到execute()函式
#然後在裡面寫入sql原生語句
cursor.execute("insert into book(id,name,author) values (null ,'三國演義','羅貫中')")
return render(request,'index.html')
urls.py中寫入:
from . import views
from django.urls import path
urlpatterns = [
path('', views.index),
]
輸入網址,在網頁中我們看不到任何資訊,是因為我們沒有編寫html檔案,但是已經執行了views.index中的程式碼。重新整理資料庫可以看到
資訊已經插入進去了。
我們也可以查詢資料庫裡面的資料,修改index函式:
def index(request):
cursor = connection.cursor()
#cursor.execute("insert into book(id,name,author) values (null ,'三國演義','羅貫中')")
cursor.execute("select * from book")
#使用一個變數來接收查詢到的資料,
#fetchall()返回查詢到的所有資料
rows = cursor.fetchall()
for row in rows:
print(row)
return render(request,'index.html')
然後我們再重新整理網頁,在控制檯就能看到從資料庫中查詢到的資訊了。
當然還可以執行刪除,修改等操作,只需要修改execute()中sql語句就行了。