Django筆記:連接數據庫並執行SQL語句


Django中安裝好數據庫和對應的數據庫驅動之后,就可以直接執行SQL語句進行數據庫和表的創建,以及數據的增刪改查等操作,在Python3中,可以使用的數據庫和驅動有多種,我這里使用的是MySQL數據庫,對應的驅動使用的是mysqlclient,安裝時直接使用pip install mysqlclient安裝即可。

一、MySQL數據庫驅動

對於Python中使用的MySQL驅動,以下幾種可以參考下:

  • MySQL-python:也就是MySQLdb,是對c語言操作MySQL數據庫的一個簡單封裝,遵循了Python DB API v2,但是,這個驅動只支持Python2,不支持Python3。
  • mysqlclient:是MySQL-python的另外一個分支,支持Python3,並修復了一些bug。
  • pymysql:純Python實現的一個驅動。當然,因為是純Python編寫的,所以執行效率不如MySQL-python(包括mysqlclient),但是也正因為是純Python編寫的,因此可以和Python代碼無縫銜接。
  • MySQL Connector/Python:MySQL官方推出的使用純Python連接MySQL的驅動,因為是純Python編寫的,因此和pymysql也有同樣的問題,即執行效率不如MySQL-python(包括mysqlclient)。

二、連接數據庫

安裝好MySQL數據庫及其驅動后,只需要在項目主app的settings.py中修改配置項DATABASESdefault項信息即可,之后運行Django項目時就可以自動連接數據庫了。具體配置方法參考示例:

DATABASES = {
    'default': {
        # 數據庫引擎
        'ENGINE': 'django.db.backends.mysql',
        # 數據庫名稱
        'NAME': 'django_db1',
        # 用戶名
        'USER': 'root',
        # 密碼
        'PASSWORD': '123456',
        # 數據庫所在的主機IP(本機就是127.0.0.1)
        'HOST': '127.0.0.1',
        # 數據庫使用的端口號(MySQL默認端口號就是3306)
        'PORT': '3306'
    }
}

三、執行SQL語句

Django中有兩種方式來操作數據庫,一種是通過ORM模型,另一種就是直接執行SQL語句,這里講一下直接執行SQL的方式。
直接執行SQL的方式需要用到from django.db import connection,並通過connection.cursor()方法獲取到數據庫的游標對象,然后使用游標對象的方法來執行對應的SQL即可。直接執行SQL的這種方式遵循Python DB API的規范,而對於遵循這個規范的數據庫驅動來說,它們使用的方法都是一樣的,不同之處在於方法內部的實現原理,比如executefetchall等方法,這些方法不只是Django中才有,只要是遵循Python DB API規范實現的驅動都會有這些方法,只是各自的實現原理不同而已。這個規范具體有哪些方法,可以參考Python官方文檔Python DB API,這里列舉一些常用的方法:

  • description:如果cursor執行了查詢的SQL,那么cursor.description將返回一個列表,列表中的元素為元組(name, type_code, display_size, internal_size, precision, scale, null_ok)
  • rowcount:表示執行了SQL后受影響的行數。
  • close:關閉游標。
  • execute(sql[, parameters]):執行SQL。執行SQL的時候如果需要傳遞參數,則可以使用parameters參數,例如cursor.execute("select * from article where id=%s", (1, ))。當然,也可以先將SQL字符串構造好后直接傳入。
  • fetchone:在執行了查詢操作后,獲取查詢結果的第一條數據。
  • fetchmany(size):在執行了查詢操作后,獲取指定條數的數據,如果不指定size參數,則默認獲取第一條數據。
  • fetchall:獲取所有SQL執行結果。

示例:通過SQL的方式操作數據庫

from django.shortcuts import render
from django.db import connection


def index(request):
    # 創建獲取游標對象
    cursor = connection.cursor()
    # 使用游標對象的execute方法執行一條SQL語句
    # cursor.execute("insert into book(id, name, author) values(null, '了不起的蓋茨比', '弗朗西斯·斯科特·基·菲茨傑拉德')")
    cursor.execute("select id, name, author from book")
    # 如果執行的查詢的SQL,則可以指定方法獲取查詢的結果
    # fetchall方法獲取所有的查詢結果
    rows = cursor.fetchall()
    for row in rows:
        print(row)
    return render(request, 'index.html')

注:本文為學習筆記,發現錯誤歡迎指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM