国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Django -- 模型(數據庫層)

發(fā)布時(shí)間:2021-08-02 23:24 來(lái)源:https://blog.51cto.com/tengxia 閱讀:134 作者:Ohimma 欄目: web開(kāi)發(fā)

[<Publisher: Apress>]          #filter == where
<Publisher: Apress>
>>> Publisher.objects.order_by("state_province", "address")

插入兩個(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   mysql    

python  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_psycopg2    

python  manage.py  migrate

第 一 個(gè) app 
>>> Publisher.objects.get(name="Apress")

PostgreSQL   postgresql    

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í),將立刻刪除涉嫌侵權內容。

亚洲AV无码国产精品色午友在线| 欧美日韩精品久久久免费观看| 亚洲人成网站18禁止人| 清区二三区国产好的精华液| 亚洲真人无码永久在线观看 | 日本熟妇色熟妇在线视频播放|