欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

django模型層(model)進(jìn)行建表、查詢(xún)與刪除的基礎(chǔ)教程

 更新時(shí)間:2017年11月21日 10:05:13   作者:布吉島丶  
這篇文章主要給大家介紹了關(guān)于django模型層(model)進(jìn)行建表、查詢(xún)與刪除的等基礎(chǔ)操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

在django的框架設(shè)計(jì)中采用了mtv模型,即Model,template,viewer

Model相對(duì)于傳統(tǒng)的三層或者mvc框架來(lái)說(shuō)就相當(dāng)對(duì)數(shù)據(jù)處理層,它主要負(fù)責(zé)與數(shù)據(jù)的交互,在使用django框架設(shè)計(jì)應(yīng)用系統(tǒng)時(shí),需要注意的是django默認(rèn)采用的是orm框架中的codefirst模型,也就是說(shuō)開(kāi)發(fā)人員只需要專(zhuān)注于代碼的編寫(xiě),而不需要過(guò)多的關(guān)注數(shù)據(jù)庫(kù)層面的東西,把開(kāi)發(fā)人員從數(shù)據(jù)庫(kù)中解放出來(lái)

django會(huì)根據(jù)Model類(lèi)生成一個(gè)數(shù)據(jù)庫(kù)鏡像文件,然后再使用該鏡像文件生成數(shù)據(jù)庫(kù),同時(shí)該文件將記錄與數(shù)據(jù)庫(kù)同步版本的變化,所以在使用django進(jìn)行開(kāi)發(fā)時(shí)不要手工去修改數(shù)據(jù)庫(kù),這樣會(huì)造成django框架的版本記錄不正確,從而無(wú)法正確的同步數(shù)據(jù)模型與數(shù)據(jù)庫(kù)的內(nèi)容

django生成的鏡像文件內(nèi)容如下:

from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('web', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='userinfo',
name='sex',
field=models.BooleanField(default=True),
preserve_default=False,
),
]

以上內(nèi)容為生的一一個(gè)版本的鏡像,內(nèi)容記錄了對(duì)model所在的app的記錄,以及執(zhí)行的動(dòng)作,如上面的鏡像文件記錄為對(duì)web的app中的model增加了一個(gè)名稱(chēng)為sex的字段,字段類(lèi)型為Boolean,默認(rèn)為T(mén)rue。

要說(shuō)一個(gè)項(xiàng)目最重要的部分是什么那鐵定數(shù)據(jù)了,也就是數(shù)據(jù)庫(kù),所以下面這篇就帶大家走進(jìn)django關(guān)于模型層model的使用,model主要就是操縱數(shù)據(jù)庫(kù)不使用sql語(yǔ)句的情況下完成數(shù)據(jù)庫(kù)的增刪改查。

本篇僅帶領(lǐng)大家進(jìn)行簡(jiǎn)單的建表、查詢(xún)和刪除,下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。 

一、ORM

映射關(guān)系:

表名 <-------> 類(lèi)名

字段 <-------> 屬性     

表記錄 <------->類(lèi)實(shí)例對(duì)象

二、創(chuàng)建表(建立模型)

1、創(chuàng)建表的代碼寫(xiě)在項(xiàng)目下的models文件中

1)比如我們創(chuàng)建一個(gè)圖書(shū)表,建立如下:

from django.db import models

# Create your models here.

class Book(models.Model):
 nid = models.AutoField(primary_key=True) #AutoField有序整形 IntegerField整形
 title = models.CharField(max_length=32) #CharField字符
 author = models.CharField(max_length=32)
 publishDate = models.DateField() #DateField日期類(lèi)型
 price = models.DecimalField(max_digits=5, decimal_places=2) #DecimalField浮點(diǎn)型也可以用FloatField

類(lèi)名就是表名,屬性就是字段。繼承django提供給我們的用于做轉(zhuǎn)換的models.Model才能將我們寫(xiě)的類(lèi)轉(zhuǎn)化為數(shù)據(jù)庫(kù)

定義好模型之后,你需要告訴Django 使用這些模型。你要做的就是修改配置文件。

2)字段常用參數(shù)

(1)null

如果為T(mén)rue,Django 將用NULL 來(lái)在數(shù)據(jù)庫(kù)中存儲(chǔ)空值。 默認(rèn)值是 False.

(1)blank

如果為T(mén)rue,該字段允許不填。默認(rèn)為False。

要注意,這與 null 不同。null純粹是數(shù)據(jù)庫(kù)范疇的,而 blank 是數(shù)據(jù)驗(yàn)證范疇的。

如果一個(gè)字段的blank=True,表單的驗(yàn)證將允許該字段是空值。如果字段的blank=False,該字段就是必填的。

(2)default

字段的默認(rèn)值??梢允且粋€(gè)值或者可調(diào)用對(duì)象。如果可調(diào)用 ,每有新對(duì)象被創(chuàng)建它都會(huì)被調(diào)用。

(3)primary_key

如果為T(mén)rue,那么這個(gè)字段就是模型的主鍵。如果你沒(méi)有指定任何一個(gè)字段的primary_key=True,
Django 就會(huì)自動(dòng)添加一個(gè)IntegerField字段做為主鍵,所以除非你想覆蓋默認(rèn)的主鍵行為,
否則沒(méi)必要設(shè)置任何一個(gè)字段的primary_key=True。

(4)unique

如果該值設(shè)置為 True, 這個(gè)數(shù)據(jù)字段的值在整張表中必須是唯一的

(5)choices

由二元組組成的一個(gè)可迭代對(duì)象(例如,列表或元組),用來(lái)給字段提供選擇項(xiàng)。 如果設(shè)置了choices ,默認(rèn)的表單將是一個(gè)選擇框而不是標(biāo)準(zhǔn)的文本框,而且這個(gè)選擇框的選項(xiàng)就是choices 中的選項(xiàng)。

這是一個(gè)關(guān)于 choices 列表的例子:

YEAR_IN_SCHOOL_CHOICES = (
 ('FR', 'Freshman'),
 ('SO', 'Sophomore'),
 ('JR', 'Junior'),
 ('SR', 'Senior'),
 ('GR', 'Graduate'),
)

每個(gè)元組中的第一個(gè)元素,是存儲(chǔ)在數(shù)據(jù)庫(kù)中的值;第二個(gè)元素是在管理界面或 ModelChoiceField 中用作顯示的內(nèi)容。 在一個(gè)給定的 model 類(lèi)的實(shí)例中,想得到某個(gè) choices 字段的顯示值,就調(diào)用 get_FOO_display 方法(這里的 FOO 就是 choices 字段的名稱(chēng) )。

例如:

from django.db import models

class Person(models.Model):
 SHIRT_SIZES = (
  ('S', 'Small'),
  ('M', 'Medium'),
  ('L', 'Large'),
 )
 name = models.CharField(max_length=60)
 shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)


>>> p = Person(name="Fred Flintstone", shirt_size="L")
>>> p.save()
>>> p.shirt_size
'L'
>>> p.get_shirt_size_display()
'Large'

2、修改配置文件setting

1)django默認(rèn)使用的是sqlite3數(shù)據(jù)庫(kù),我們使用的是mysql數(shù)據(jù)庫(kù)所以需要修改配置

原先配置(將這些配置注釋掉)

DATABASES = {
 'default': {
  'ENGINE': 'django.db.backends.sqlite3',
  'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 }
}

重新配置

DATABASES = {

 'default': {
   
  'ENGINE': 'django.db.backends.mysql',

  'NAME': 'blog', #你的數(shù)據(jù)庫(kù)名稱(chēng) 數(shù)據(jù)庫(kù)需要自己提前建好

  'USER': 'root', #你的數(shù)據(jù)庫(kù)用戶(hù)名

  'PASSWORD': '', #你的數(shù)據(jù)庫(kù)密碼

  'HOST': '', #你的數(shù)據(jù)庫(kù)主機(jī),留空默認(rèn)為localhost

  'PORT': '3306', #你的數(shù)據(jù)庫(kù)端口

 }
}

3、創(chuàng)建表命令

1)同步更改數(shù)據(jù)庫(kù)表或字段

老版本:

python manage.py syncdb

Django 1.7.1 及以上的版本需要用以下命令

python manage.py makemigrations
python manage.py migrate

2)運(yùn)行python manage.py makemigrations后我們應(yīng)用下的migrations文件夾里會(huì)自動(dòng)生成一個(gè)文件,是將我們寫(xiě)的類(lèi)進(jìn)一步轉(zhuǎn)化:

# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-25 03:30
from __future__ import unicode_literals

from django.db import migrations, models

class Migration(migrations.Migration):

 initial = True

 dependencies = [
 ]

 operations = [
  migrations.CreateModel(
   name='Book',
   fields=[
    ('nid', models.AutoField(primary_key=True, serialize=False)),
    ('title', models.CharField(max_length=32)),
    ('author', models.CharField(max_length=32)),
    ('publishDate', models.DateField()),
    ('price', models.DecimalField(decimal_places=2, max_digits=5)),
   ],
  ),
 ]

3)運(yùn)行python manage.py migrate后表就插入到我們的數(shù)據(jù)庫(kù)中了

4)注意:

如果我們的python是3.x版本運(yùn)行上面兩條會(huì)報(bào)錯(cuò)

No module named "MySQLdb"

在3.x走數(shù)據(jù)庫(kù)用的是pymysql模塊所以我們需要告訴django用pymysql

在應(yīng)用下的__init__.py文件里添加代碼

import pymysql

pymysql.install_as_MySQLdb()

運(yùn)行后在數(shù)據(jù)庫(kù)里查看:

會(huì)發(fā)現(xiàn)django給我們創(chuàng)建了很多表 我們自己創(chuàng)建的Book表會(huì)被自動(dòng)改名為 應(yīng)用名_book 這樣避免了我們?cè)诓煌膽?yīng)用中有相同的表,其他的表后面用到時(shí)會(huì)一一介紹。

三、查看表

1、先在視圖函數(shù)view中將數(shù)據(jù)取出來(lái)

from app01 import models #app01是應(yīng)用名

def index(request):
 # 從數(shù)據(jù)庫(kù)取出所有書(shū)籍對(duì)象
 bookList=models.Book.objects.all() # [bookObj1,.....]
 return render(request,"index.html",{"bookList":bookList})

查詢(xún)相關(guān)

<1> all():    查詢(xún)所有結(jié)果

<2> filter():    查詢(xún)所給篩選條件相匹配的對(duì)象

2、在template模版中接收

{% for book_obj in bookList %}
 <tr>
  <td>{{ book_obj.nid }}</td>
  <td>{{ book_obj.title }}</td>
  <td>{{ book_obj.author }}</td>
  <td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
  <td>{{ book_obj.price }}</td>
 </tr>
{% endfor %}

四、刪除

刪除方法就是 delete() 。它運(yùn)行時(shí)立即刪除對(duì)象而不返回任何值。

比如我們給表中添加一個(gè)刪除按鈕來(lái)實(shí)現(xiàn)點(diǎn)擊按鈕后數(shù)據(jù)庫(kù)每條記錄的刪除

1、template模版

{% for book_obj in bookList %}
 <tr>
  <td>{{ book_obj.nid }}</td>
  <td>{{ book_obj.title }}</td>
  <td>{{ book_obj.author }}</td>
  <td>{{ book_obj.publishDate|date:"Y-m-d" }}</td>
  <td>{{ book_obj.price }}</td>
  <td>
   <a href="/del/{{ book_obj.nid }}"><button class="btn btn-danger">刪除</button></a>
  </td>
 </tr>
{% endfor %}

2、url 分發(fā)

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^index/', views.index),
 url(r'^del/(\d+)', views.delBook),
]

3、視圖函數(shù)view實(shí)現(xiàn)刪除

def delBook(request,id):
 models.Book.objects.filter(nid=id).delete()
 return redirect("/index/")

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • python畫(huà)圖常見(jiàn)不同圖片格式保存方式

    python畫(huà)圖常見(jiàn)不同圖片格式保存方式

    這篇文章主要介紹了python畫(huà)圖常見(jiàn)不同圖片格式保存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python導(dǎo)入pandas具體步驟方法

    python導(dǎo)入pandas具體步驟方法

    在本篇文章中小編給大家分享了關(guān)于python導(dǎo)入pandas的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • tensorflow從ckpt和從.pb文件讀取變量的值方式

    tensorflow從ckpt和從.pb文件讀取變量的值方式

    這篇文章主要介紹了tensorflow從ckpt和從.pb文件讀取變量的值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • linux下python使用sendmail發(fā)送郵件

    linux下python使用sendmail發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了linux下python使用sendmail發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 使用Python快樂(lè)學(xué)數(shù)學(xué)Github萬(wàn)星神器Manim簡(jiǎn)介

    使用Python快樂(lè)學(xué)數(shù)學(xué)Github萬(wàn)星神器Manim簡(jiǎn)介

    這篇文章主要介紹了使用Python快樂(lè)學(xué)數(shù)學(xué)Github萬(wàn)星神器Manim簡(jiǎn)介,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 2021年最新用于圖像處理的Python庫(kù)總結(jié)

    2021年最新用于圖像處理的Python庫(kù)總結(jié)

    為了快速地處理大量信息,科學(xué)家需要利用圖像準(zhǔn)備工具來(lái)完成人工智能和深度學(xué)習(xí)任務(wù).在本文中,我將深入研究Python中最有用的圖像處理庫(kù),這些庫(kù)正在人工智能和深度學(xué)習(xí)任務(wù)中得到大力利用.我們開(kāi)始吧,需要的朋友可以參考下
    2021-06-06
  • 從局部變量和全局變量開(kāi)始全面解析Python中變量的作用域

    從局部變量和全局變量開(kāi)始全面解析Python中變量的作用域

    無(wú)論是以類(lèi)為基礎(chǔ)的面相對(duì)象編程,還是單純函數(shù)內(nèi)部變量的定義,變量的作用域始終是Python學(xué)習(xí)中一個(gè)必須理解掌握的環(huán)節(jié),下面我們從局部變量和全局變量開(kāi)始全面解析Python中變量的作用域,需要的朋友可以參考下
    2016-06-06
  • python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例

    python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例

    下面小編就為大家分享一篇python3 pandas 讀取MySQL數(shù)據(jù)和插入的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • Pytorch的torch.utils.data中Dataset以及DataLoader示例詳解

    Pytorch的torch.utils.data中Dataset以及DataLoader示例詳解

    torch.utils.data?是?PyTorch?提供的一個(gè)模塊,用于處理和加載數(shù)據(jù),該模塊提供了一系列工具類(lèi)和函數(shù),用于創(chuàng)建、操作和批量加載數(shù)據(jù)集,這篇文章主要介紹了Pytorch的torch.utils.data中Dataset以及DataLoader等詳解,需要的朋友可以參考下
    2023-08-08
  • Pycharm配置lua編譯環(huán)境過(guò)程圖解

    Pycharm配置lua編譯環(huán)境過(guò)程圖解

    這篇文章主要介紹了Pycharm配置lua編譯環(huán)境過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11

最新評(píng)論