11.數據庫操做

 

MySQL驅動程序安裝:

咱們使用Django來操做MySQL,實際上底層仍是經過Python來操做的。所以咱們想要用Django來操做MySQL,首先仍是須要安裝一個驅動程序。在Python3中,驅動程序有多種選擇。好比有pymysql以及mysqlclient等。這裏咱們就使用mysqlclient來操做。mysqlclient安裝很是簡單。只須要經過pip install mysqlclient便可安裝。javascript

常見MySQL驅動介紹:html

  1. MySQL-python:也就是MySQLdb。是對C語言操做MySQL數據庫的一個簡單封裝。遵循了Python DB API v2。可是隻支持Python2,目前還不支持Python3。
  2. mysqlclient:是MySQL-python的另一個分支。支持Python3而且修復了一些bug。
  3. pymysql:純Python實現的一個驅動。由於是純Python編寫的,所以執行效率不如MySQL-python。而且也由於是純Python編寫的,所以能夠和Python代碼無縫銜接。
  4. MySQL Connector/Python:MySQL官方推出的使用純Python鏈接MySQL的驅動。由於是純Python開發的。效率不高。

Django配置鏈接數據庫:

在操做數據庫以前,首先先要鏈接數據庫。這裏咱們以配置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中操做數據庫:

在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

Python DB API下規範下cursor對象經常使用接口:

  1. description:若是cursor執行了查詢的sql代碼。那麼讀取cursor.description屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是(name,type_code,display_size,internal_size,precision,scale,null_ok),其中name表明的是查找出來的數據的字段名稱,其餘參數暫時用處不大。web

  2. rowcount:表明的是在執行了sql語句後受影響的行數。sql

  3. close:關閉遊標。關閉遊標之後就不再能使用了,不然會拋出異常。數據庫

  4. execute(sql[,parameters]):執行某個sql語句。若是在執行sql語句的時候還須要傳遞參數,那麼能夠傳給parameters參數。示例代碼以下:django

    cursor.execute("select * from article where id=%s",(1,))
  5. fetchone:在執行了查詢操做之後,獲取第一條數據。

  6. fetchmany(size):在執行查詢操做之後,獲取多條數據。具體是多少條要看傳的size參數。若是不傳size參數,那麼默認是獲取第一條數據。

  7. fetchall:獲取全部知足sql語句的數據。

相關文章
相關標籤/搜索