咱們使用Django來操做MySQL,實際上底層仍是經過Python來操做的。所以咱們想要用Django來操做MySQL,首先仍是須要安裝一個驅動程序。在Python3中,驅動程序有多種選擇。好比有pymysql以及mysqlclient等。這裏咱們就使用mysqlclient
來操做。mysqlclient
安裝很是簡單。只須要經過pip install mysqlclient
便可安裝。javascript
常見MySQL驅動介紹:html
MySQL-python
:也就是MySQLdb。是對C語言操做MySQL數據庫的一個簡單封裝。遵循了Python DB API v2。可是隻支持Python2,目前還不支持Python3。mysqlclient
:是MySQL-python的另一個分支。支持Python3而且修復了一些bug。pymysql
:純Python實現的一個驅動。由於是純Python編寫的,所以執行效率不如MySQL-python。而且也由於是純Python編寫的,所以能夠和Python代碼無縫銜接。MySQL Connector/Python
:MySQL官方推出的使用純Python鏈接MySQL的驅動。由於是純Python開發的。效率不高。在操做數據庫以前,首先先要鏈接數據庫。這裏咱們以配置MySQL爲例來說解。Django鏈接數據庫,不須要單獨的建立一個鏈接對象。只須要在settings.py
文件中作好數據庫相關的配置就能夠了。示例代碼以下:java
DATABASES = { 'default': { # 數據庫引擎(是mysql仍是oracle等) 'ENGINE': 'django.db.backends.mysql', # 數據庫的名字 'NAME': 'dfz', # 鏈接mysql數據庫的用戶名 'USER': 'root', # 鏈接mysql數據庫的密碼 'PASSWORD': 'root', # mysql數據庫的主機地址 'HOST': '127.0.0.1', # mysql數據庫的端口號 'PORT': '3306', } }
在Django中操做數據庫有兩種方式。第一種方式就是使用原生sql語句操做,第二種就是使用ORM模型來操做。這節課首先來說下第一種。python
在Django中使用原生sql語句操做其實就是使用python db api的接口來操做。若是你的mysql驅動使用的是pymysql,那麼你就是使用pymysql來操做的,只不過Django將數據庫鏈接的這一部分封裝好了,咱們只要在settings.py中配置好了數據庫鏈接信息後直接使用Django封裝好的接口就能夠操做了。示例代碼以下:mysql
# 使用django封裝好的connection對象,會自動讀取settings.py中數據庫的配置信息 from django.db import connection # 獲取遊標對象 cursor = connection.cursor() # 拿到遊標對象後執行sql語句 cursor.execute("select * from book") # 獲取全部的數據 rows = cursor.fetchall() # 遍歷查詢到的數據 for row in rows: print(row)
以上的execute以及fetchall方法都是Python DB API規範中定義好的。任何使用Python來操做MySQL的驅動程序都應該遵循這個規範。因此無論是使用pymysql或者是mysqlclient或者是mysqldb,他們的接口都是同樣的。更多規範請參考:https://www.python.org/dev/peps/pep-0249/。ios
description
:若是cursor執行了查詢的sql代碼。那麼讀取cursor.description
屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是(name,type_code,display_size,internal_size,precision,scale,null_ok)
,其中name表明的是查找出來的數據的字段名稱,其餘參數暫時用處不大。web
rowcount
:表明的是在執行了sql語句後受影響的行數。sql
close
:關閉遊標。關閉遊標之後就不再能使用了,不然會拋出異常。數據庫
execute(sql[,parameters])
:執行某個sql語句。若是在執行sql語句的時候還須要傳遞參數,那麼能夠傳給parameters參數。示例代碼以下:django
cursor.execute("select * from article where id=%s",(1,))
fetchone
:在執行了查詢操做之後,獲取第一條數據。
fetchmany(size)
:在執行查詢操做之後,獲取多條數據。具體是多少條要看傳的size參數。若是不傳size參數,那麼默認是獲取第一條數據。
fetchall
:獲取全部知足sql語句的數據。