1. 程式人生 > >043:Django使用原生SQL語句操作資料庫

043:Django使用原生SQL語句操作資料庫

Django使用原生SQL語句操作資料庫

Django配置連線資料庫:

  在操作資料庫之前,首先先要連線資料庫。這裡我們以配置 MySQL 為例來講解。 Django 連線資料庫,不需要單獨的建立一個連線物件。只需要在 settings.py 檔案中做好資料庫相關的配置就可以了。示例程式碼如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'iotservice',
        'USER': 'root',
        'PASSWORD
': 'uS$&e23klg1n', 'HOST': '127.0.0.1', 'PORT': '3306' } }

在Django中操作資料庫:

  在 Django 中操作資料庫有兩種方式。第一種方式就是使用原生 sql 語句操作,第二種就是使用 ORM 模型來操作。這節課首先來講下第一種。在 Django 中使用原生 sql 語句操作其實就是使用 python db api 的介面來操作。如果你的 mysql 驅動使用的是 pymysql ,那麼你就是使用 pymysql 來操作的,只不過 Django 將資料庫連線的這一部分封裝好了,我們只要在 settings.py 中配置好了資料庫連線資訊後直接使用 Django 封裝好的介面就可以操作了。示例程式碼如下:

# 使用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/。

Python DB API下規範下cursor物件常用介面:

1、description :如果 cursor 執行了查詢的 sql 程式碼。那麼讀取 cursor.description 屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是 (name,type_code,display_size,internal_size,precision,scale,null_ok) ,其中 name 代表的是查找出來的資料的欄位名稱,其他引數暫時用處不大。
2、rowcount :代表的是在執行了 sql 語句後受影響的行數。
3、close :關閉遊標。關閉遊標以後就再也不能使用了,否則會丟擲異常。
4、execute(sql[,parameters]) :執行某個 sql 語句。如果在執行 sql 語句的時候還需要傳遞引數,那麼可以傳給 parameters 引數。示例程式碼如下:

cursor.execute("select * from article where id=%s",(1,))

5、fetchone :在執行了查詢操作以後,獲取第一條資料。

6、fetchmany(size) :在執行查詢操作以後,獲取多條資料。具體是多少條要看傳的 size 引數。如果不傳 size 引數,那麼預設是獲取第一條資料。
7、fetchall :獲取所有滿足 sql 語句的資料。

工程例項程式碼截圖: