django資料庫連線和使用原生sql語句
Django配置連線資料庫:
在操作資料庫之前,首先先要連線資料庫。這裡我們以配置MySQL
為例來講解。Django
連線資料庫,不需要單獨的建立一個連線物件。只需要在settings.py
檔案中做好資料庫相關的配置就可以了。示例程式碼如下:
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
模型來操作。這節課首先來講下第一種。
在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物件常用介面:
-
description
:如果cursor
執行了查詢的sql
程式碼。那麼讀取cursor.description
屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是(name,type_code,display_size,internal_size,precision,scale,null_ok)
,其中name
代表的是查找出來的資料的欄位名稱,其他引數暫時用處不大。 -
rowcount
:代表的是在執行了sql
語句後受影響的行數。 -
close
:關閉遊標。關閉遊標以後就再也不能使用了,否則會丟擲異常。 -
execute(sql[,parameters])
:執行某個sql
語句。如果在執行sql
語句的時候還需要傳遞引數,那麼可以傳給parameters
引數。示例程式碼如下:cursor.execute("select * from article where id=%s",(1,))
-
fetchone
:在執行了查詢操作以後,獲取第一條資料。 -
fetchmany(size)
:在執行查詢操作以後,獲取多條資料。具體是多少條要看傳的size
引數。如果不傳size
引數,那麼預設是獲取第一條資料。 -
fetchall
:獲取所有滿足sql
語句的資料。