【轉】Django 數據庫的操做

Django 牢牢地遵循這種 MVC 模式,能夠稱得上是一種 MVC 框架。如下是 Django 中 M、V 和 C 各自的含義:python

  • M ,數據存取部分,由django數據庫層處理,本章要講述的內容。mysql

  • V ,選擇顯示哪些數據要及怎樣顯示的部分,由視圖和模板處理。web

  • C ,根據用戶輸入委派視圖的部分,由 Django 框架經過按照 URLconf 設置,對給定 URL 調用合適的 python 函數來自行處理。sql

因爲 C 由框架自行處理,而 Django 裏更關注的是模型(Model)、模板(Template)和視圖(Views),Django 也被稱爲 MTV 框架 。在 MTV 開發模式中:shell

  • M 表明模型(Model),即數據存取層。該層處理與數據相關的全部事務:如何存取、如何確認有效性、包含哪些行爲以及數據之間的關係等。數據庫

  • T 表明模板(Template),即表現層。該層處理與表現相關的決定:如何在頁面或其餘類型文檔中進行顯示。django

  • V 表明視圖(View),即業務邏輯層。該層包含存取模型及調取恰當模板的相關邏輯。你能夠把它看做模型與模板之間的橋樑。服務器



models.py就是Django裏面的建表所需的數據模型的描述:

命令:
python manage.py init 初始化數據庫

python manage.py sqlall [appname] 查看app的CREATE TABLE的語句,包括原始數據,建立索引等.

python manage.py sqlreset [appname] 修改models,不保留之前數據,進行重置數據庫,更新表。

python manage.py validate 用來排錯

python manage.py syncdb 用來建表

python manage.py sql databasename 用來查看已建立數據庫表結構


數據庫建表過程:
1.建立應用程序
python manage.py startapp appname

2.用python代碼寫models.py,建立數據模型
from django.db import models

class Publisher(models.Model):
    name = models.CharField(maxlength=30)
    address = models.CharField(maxlength=50)
    city = models.CharField(maxlength=60)
    state_province = models.CharField(maxlength=30)
    country = models.CharField(maxlength=50)
    website = models.URLField()
3.模型的安裝
編輯settings.py
添加:
INSTALLED_APPS=(
        'mysite.appname',
}

4.建立數據庫表:
python manage.py validate    (驗證模型有效性)

python manage.py sqlall appname (生成CREATE TABLE語句)

python manage.py syncdb (執行上一步產生的SQL語句,簡表。不執行上一句也能夠建,也能夠把上一句執行產生的SQL語句放入SQL客戶端去執行,syncdb 僅僅建立數據庫中不存在的表,而不會同步模型的修改或者刪除到數據庫)

5.插入和更新數據
插入數據:
定義對象
p = Publisher(.....)         //將新的內容放到Publisher裏面賦給對象p
p.save()       //完成插入

上面至關於SQL語言:
INSERT INTO book_publisher
    (name, address, city, state_province, country, website)
VALUES
    ('Apress', '2855 Telegraph Ave.', 'Berkeley', 'CA',
     'U.S.A.', 'http://www.apress.com/');
更新數據:
p.name = 'NewName'        //修改對象p的名字
p.save()         //完成存儲

上面至關於SQL語言:
UPDATE book_publisher SET
    name = 'NewName',
    address = '2855 Telegraph Ave.',
    city = 'Berkeley',
    state_province = 'CA',
    country = 'U.S.A.',
    website = 'http://www.apress.com'
WHERE id = 52;
選擇對象:
Publisher.objects.all()
至關於SQL:
SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher;
數據過濾
Publisher.objects.filter(name="NewName")
至關於SQL語句:
SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
WHERE name = 'NewName';

縮小範圍:
 Publisher.objects.filter(country="U.S.A.", state_province="CA")
至關於SQL語句:

SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
WHERE country = 'U.S.A.' AND state_province = 'CA';

模糊匹配:
Publisher.objects.filter(name__contains="press")

在 name 和 contains 之間有雙下劃線。象Python本身同樣,Django也使用 雙下劃線來作一些小魔法,這個 __contains 部分會被Django轉換成 LIKE SQL語句:app

SELECT id, name, address, city, state_province, country, website FROM book_publisher WHERE name LIKE '%press%';

獲取單個對象:
Publisher.objects.get(name="Apress Publishing")數據排序:   Publisher.objects.order_by("name")
至關於SQL語句:
SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
ORDER BY name;

能夠支持多個字段排序:
 Publisher.objects.order_by("state_provice", "address")

也能夠逆向排序:
Publisher.objects.order_by("-name") 添加‘-’同時排序和過濾:  Publisher.objects.filter(country="U.S.A.").order_by("-name")
至關於SQL語句:
SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
WHERE country = 'U.S.A'
ORDER BY name DESC; 限制返回數據:  Publisher.objects.all()[Number]    //Number能夠換成想要顯示的位置下標
至關於SQL語句:
SELECT
    id, name, address, city, state_province, country, website
FROM book_publisher
ORDER BY name
LIMIT 1; 刪除對象:p = Publisher.objects.get(name="NewName")
p.delete()


修改數據庫表結構:
添加字段:

首先,在開發環境中執行下面的步驟(也就是說,不是在發佈服務器上):框架

  1. 把這個字段添加到你的模型中.

  1. 運行 manage.py sqlall [yourapp] 會看到模型的新的 CREATE TABLE 語句。 注意新的字段的列定義。

  1. 啓動您的數據庫交互shell(也就是 psql 或 mysql , 或者您也能夠使用 manage.py dbshell )。 執行一個 ALTER TABLE 語句,添加您的新列。SQL語句:(ALTER TABLE books_publisher ADD COLUMN test integer)

  2. (可選)用 manage.py shell 啓動Python交互式shell,並經過引入模型並選擇表 驗證新的字段已被正確添加。

刪除字段:
ALTER TABLE books_book DROP COLUMN test;刪除表:DROP TABLE books_book
相關文章
相關標籤/搜索