在Django的視圖中使用資料庫查詢的方法

來源:互聯網
上載者:User
在視圖中也有笨方法可以從資料庫中擷取資料。 很簡單: 用現有的任何 Python 類庫執行一條 SQL 查詢並對結果進行一些處理。

在本例的視圖中,我們使用了 MySQLdb 類庫(可以從 http://www.djangoproject.com/r/python-mysql/ 獲得)來串連 MySQL 資料庫,取回一些記錄,將它們提供給模板以顯示一個網頁:

from django.shortcuts import render_to_responseimport MySQLdbdef book_list(request):  db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')  cursor = db.cursor()  cursor.execute('SELECT name FROM books ORDER BY name')  names = [row[0] for row in cursor.fetchall()]  db.close()  return render_to_response('book_list.html', {'names': names})

這個方法可用,但很快一些問題將出現在你面前:

我們將資料庫連接參數硬行編碼於代碼之中。 理想情況下,這些參數應當儲存在 Django 配置中。

我們不得不重複同樣的代碼: 建立資料庫連接、建立資料庫遊標、執行某個語句、然後關閉資料庫。 理想情況下,我們所需要應該只是指定所需的結果。

它把我們栓死在 MySQL 之上。 如果過段時間,我們要從 MySQL 換到 PostgreSQL,就不得不使用不同的資料庫適配器(例如 psycopg 而不是 MySQLdb ),改變串連參數,根據 SQL 陳述式的類型可能還要修改SQL 。 理想情況下,應對所使用的資料庫伺服器進行抽象,這樣一來只在一處修改即可變換資料庫伺服器。 (如果你正在建立一個開源的Django應用程式來儘可能讓更多人使用的話,這個特性是非常適當的。)

正如你所期待的,Django資料庫層正是致力於解決這些問題。 以下提前揭示了如何使用 Django 資料庫 API 重寫之前那個視圖。

from django.shortcuts import render_to_responsefrom mysite.books.models import Bookdef book_list(request):  books = Book.objects.order_by('name')  return render_to_response('book_list.html', {'books': books})

我們將在本章稍後的地方解釋這段代碼。 目前而言,僅需對它有個大致的認識。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.