最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django模型層(model)進行建表、查詢與刪除的基礎教程

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

前言

在django的框架設計中采用了mtv模型,即Model,template,viewer

Model相對于傳統(tǒng)的三層或者mvc框架來說就相當對數(shù)據(jù)處理層,它主要負責與數(shù)據(jù)的交互,在使用django框架設計應用系統(tǒng)時,需要注意的是django默認采用的是orm框架中的codefirst模型,也就是說開發(fā)人員只需要專注于代碼的編寫,而不需要過多的關注數(shù)據(jù)庫層面的東西,把開發(fā)人員從數(shù)據(jù)庫中解放出來

django會根據(jù)Model類生成一個數(shù)據(jù)庫鏡像文件,然后再使用該鏡像文件生成數(shù)據(jù)庫,同時該文件將記錄與數(shù)據(jù)庫同步版本的變化,所以在使用django進行開發(fā)時不要手工去修改數(shù)據(jù)庫,這樣會造成django框架的版本記錄不正確,從而無法正確的同步數(shù)據(jù)模型與數(shù)據(jù)庫的內(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)容為生的一一個版本的鏡像,內(nèi)容記錄了對model所在的app的記錄,以及執(zhí)行的動作,如上面的鏡像文件記錄為對web的app中的model增加了一個名稱為sex的字段,字段類型為Boolean,默認為True。

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

本篇僅帶領大家進行簡單的建表、查詢和刪除,下面話不多說了,來一起看看詳細的介紹吧。 

一、ORM

映射關系:

表名 <-------> 類名

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

表記錄 <------->類實例對象

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

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

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

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日期類型
 price = models.DecimalField(max_digits=5, decimal_places=2) #DecimalField浮點型也可以用FloatField

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

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

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

(1)null

如果為True,Django 將用NULL 來在數(shù)據(jù)庫中存儲空值。 默認值是 False.

(1)blank

如果為True,該字段允許不填。默認為False。

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

如果一個字段的blank=True,表單的驗證將允許該字段是空值。如果字段的blank=False,該字段就是必填的。

(2)default

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

(3)primary_key

如果為True,那么這個字段就是模型的主鍵。如果你沒有指定任何一個字段的primary_key=True,
Django 就會自動添加一個IntegerField字段做為主鍵,所以除非你想覆蓋默認的主鍵行為,
否則沒必要設置任何一個字段的primary_key=True。

(4)unique

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

(5)choices

由二元組組成的一個可迭代對象(例如,列表或元組),用來給字段提供選擇項。 如果設置了choices ,默認的表單將是一個選擇框而不是標準的文本框,而且這個選擇框的選項就是choices 中的選項。

這是一個關于 choices 列表的例子:

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

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

例如:

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默認使用的是sqlite3數(shù)據(jù)庫,我們使用的是mysql數(shù)據(jù)庫所以需要修改配置

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

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ù)庫名稱 數(shù)據(jù)庫需要自己提前建好

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

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

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

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

 }
}

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

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

老版本:

python manage.py syncdb

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

python manage.py makemigrations
python manage.py migrate

2)運行python manage.py makemigrations后我們應用下的migrations文件夾里會自動生成一個文件,是將我們寫的類進一步轉(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)運行python manage.py migrate后表就插入到我們的數(shù)據(jù)庫中了

4)注意:

如果我們的python是3.x版本運行上面兩條會報錯

No module named "MySQLdb"

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

在應用下的__init__.py文件里添加代碼

import pymysql

pymysql.install_as_MySQLdb()

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

會發(fā)現(xiàn)django給我們創(chuàng)建了很多表 我們自己創(chuàng)建的Book表會被自動改名為 應用名_book 這樣避免了我們在不同的應用中有相同的表,其他的表后面用到時會一一介紹。

三、查看表

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

from app01 import models #app01是應用名

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

查詢相關

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

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

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() 。它運行時立即刪除對象而不返回任何值。

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

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實現(xiàn)刪除

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

總結(jié)

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

相關文章

  • Python處理圖片并實現(xiàn)生成天際線

    Python處理圖片并實現(xiàn)生成天際線

    天際線(SkyLine)顧名思義就是天空與地面的邊界線,這篇文章主要為大家介紹了如何使用Python實現(xiàn)處理圖片并實現(xiàn)生成天際線,感興趣的可以了解下
    2024-01-01
  • Python中常見的KeyError報錯分析

    Python中常見的KeyError報錯分析

    在Python編程中,KeyError是一種非常常見的異常,它通常發(fā)生在嘗試訪問字典中不存在的鍵時,本文將深入探討KeyError的報錯原因、解決辦法,并通過代碼示例來演示如何避免這一錯誤,需要的朋友可以參考下
    2024-07-07
  • Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程)

    Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程)

    今天小編就為大家分享一篇Pytorch.nn.conv2d 過程驗證方式(單,多通道卷積過程),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python 實現(xiàn)域名解析為ip的方法

    Python 實現(xiàn)域名解析為ip的方法

    今天小編就為大家分享一篇Python 實現(xiàn)域名解析為ip的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 科學計算NumPy之Ndarray運算函數(shù)操作示例匯總

    科學計算NumPy之Ndarray運算函數(shù)操作示例匯總

    這篇文章主要為大家介紹了科學計算NumPy之Ndarray運算函數(shù)操作示例匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python 中的 else詳解

    Python 中的 else詳解

    這篇文章主要介紹了Python 中的 else詳解的相關資料,需要的朋友可以參考下
    2016-04-04
  • Python工具PDB調(diào)試器的使用方法詳解

    Python工具PDB調(diào)試器的使用方法詳解

    還記得你是如何進行代碼調(diào)試的嗎?有人會說,我是添加一些輸出語句,有人說,我是使用IDE自帶的設置斷點功能,當然都沒有錯,只是看哪個更合適,更能提升效率,但這都不是我們今天講的重點,今天的重點是Python中PDB調(diào)試器的使用方法,需要的朋友可以參考下
    2023-11-11
  • 利用Python爬蟲爬取金融期貨數(shù)據(jù)的案例分析

    利用Python爬蟲爬取金融期貨數(shù)據(jù)的案例分析

    從技術角度來看,經(jīng)過一步步解析,任務是簡單的,入門requests爬蟲及入門pandas數(shù)據(jù)分析就可以完成,本文重點給大家介紹Python爬蟲爬取金融期貨數(shù)據(jù)的案例分析,感興趣的朋友一起看看吧
    2022-06-06
  • python接口自動化使用requests庫發(fā)送http請求

    python接口自動化使用requests庫發(fā)送http請求

    這篇文章主要介紹了python接口自動化使用requests庫發(fā)送http請求,HTTP協(xié)議?,一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù),包括html文件、圖像、結(jié)果等,即是一個客戶端和服務器端請求和應答的標準
    2022-08-08
  • 在pycharm創(chuàng)建scrapy項目的實現(xiàn)步驟

    在pycharm創(chuàng)建scrapy項目的實現(xiàn)步驟

    這篇文章主要介紹了在pycharm創(chuàng)建scrapy項目的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12

最新評論

仁化县| 南平市| 新乡市| 阜新| 巴塘县| 石渠县| 三江| 招远市| 宣化县| 西和县| 错那县| 仲巴县| 沙坪坝区| 汉源县| 钟山县| 抚远县| 水富县| 滕州市| 舒兰市| 丹寨县| 珠海市| 新营市| 安丘市| 年辖:市辖区| 冷水江市| 青铜峡市| 屯昌县| 彭阳县| 磐安县| 张家口市| 怀宁县| 内黄县| 德庆县| 丹寨县| 灵石县| 疏勒县| 壶关县| 阳山县| 思茅市| 准格尔旗| 肃宁县|