- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) >
- Django -- 模型(數據庫層)
插入兩個(gè)數據后,講道理Publisher.objects.all()方法會(huì )取出Publisher類(lèi)的對象,但是卻沒(méi)有得到有用信息;
直接刪除:>>> Publisher.objects.filter(country='USA').delete() #刪除所有country='USA'的
web應用中,主觀(guān)邏輯(視圖處理)經(jīng)常牽涉與數據庫的交互。數據庫驅動(dòng)網(wǎng)站在后臺連接數據庫,從中取數據,然后甩漂亮界面展現在web端。許多復雜的網(wǎng)站都提供以上兩種功能的結合(如Amazon.com),而Python天生具備簡(jiǎn)單強大的數據庫查詢(xún)執行方法,很適合開(kāi)發(fā)這類(lèi)數據庫驅動(dòng)網(wǎng)站。
保存數據:>>> p2.save() #他會(huì )update此id全部字段,不只是name字段;也有輕量級更改的方法。
1、數據查看、過(guò)濾操作:
[<Publisher: Apress>] #逗號轉換成了 and
vim ~/HelloWorld/mysql_django/models.py
class Publisher(models.Model):
def __unicode__(self):
return self.name
** class Meta:
** ordering = ['name'] #Meta類(lèi),默認會(huì )以name字段進(jìn)行排序
3、連鎖查詢(xún):
T:表現層,處理與表現相關(guān)的決定,比如頁(yè)面如何顯示;
啟動(dòng)shell界面:python manage.py shell
>>> from django.db import connection
那我們能不能像上節那樣創(chuàng )建模板,其實(shí)django提供了更簡(jiǎn)單直接的方式:數據庫API
vim ~/HelloWorld/mysql_django/models.py from django.db import models class Publisher(models.Model): #CREATE TABLE "books_publisher"("id" serial NOT NULL PRIMARY KEY, name = models.CharField(max_length=30) #"name" varchar(30) NOT NULL, address = models.CharField(max_length=50) #"address" varchar(50) NOT NULL, city = models.CharField(max_length=60) #"city" varchar(60) NOT NULL, state_province = models.CharField(max_length=30) #"state_province" varchar(30) NOT NULL, country = models.CharField(max_length=50) #"country" varchar(50) NOT NULL, website = models.URLField() #"website" varchar(200) NOT NULL ); class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()代碼解讀:
>>> Publisher.objects.order_by('name')[0] #[0]=limit 1;不支持負索引[-1],但可用降序[0]實(shí)現2、每個(gè)模型相當于數據庫表,每個(gè)屬性即字段,類(lèi)型(CharField)相當于字段類(lèi)型(varchar)
MySQL mysqlpython manage.py check
刪除全部:>>> Publisher.objects.all().delete() #不加all()方法刪除不了
[<Publisher: O'Reilly>, <Publisher: Apress>] #-號,表示逆向排序1、首先每個(gè)數據模型都是django.db.models.Model的子類(lèi),父類(lèi)Model包含所有與數據庫交互的必要方法;
python manage.py sqlmigrate mysql_django 0001
添加數據:>>> p3 = ....name='Apress' ...
============================================================================================
Django 設計遵循松耦合原則,修改某部分不影響其他部分。視圖函數中通過(guò)了模板系統將業(yè)務(wù)邏輯和表現邏輯分隔,數據庫層也應如此。
vim ~/HelloWorld/mysql_django/models.py from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) ...................... website = models.URLField() ** def __unicode__(self): ** return self.name class Author(models.Model): ......................... ** def __unicode__(self): ** return u'%s %s' % (self.first_name, self.last_name)** class Book(models.Model): ......................... ** def __unicode__(self): ** return self.title============================================================================================
4、定義了出版商、作者、書(shū)籍的一些內容。
PostgreSQL postgresql_psycopg2python manage.py migrate
第 一 個(gè) app
>>> Publisher.objects.get(name="Apress")
2、數據排序操作:
a、檢查語(yǔ)法錯誤(django1.9.0版本以下用 python manage.py validate)
MVC 架構模式:即數據存取邏輯(model)、表現邏輯(view)、業(yè)務(wù)邏輯(controller)的組合
數據庫 DATABASE_ENGINE 適配器================================================================================================
from django.shortcuts import render_to_response import MySQLdb def 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})弊端:此方法雖可用,但是我們將參數配置直接硬編碼到視圖函數,顯然犯了前兩節相同的錯誤;如果我們改一個(gè)參數、改一種數據庫、換個(gè)執行語(yǔ)句等等,都會(huì )引起大范圍的改動(dòng)。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2 建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站