django--模型層(ORM)-建表


要說一個項目最重要的部分是什么那鐵定數據了,也就是數據庫,這篇就開始帶大家走進django關於模型層model的使用,model主要就是操縱數據庫不使用sql語句的情況下完成數據庫的增刪改查。本篇僅帶領大家進行簡單的建表、查詢和刪除,因為model的重要性所以后面幾篇都會圍繞ORM慢慢深入。

 

本篇導論:

 

一、ORM

映射關系:

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

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

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


 

二、創建表(建立模型)

1、創建表的代碼寫在項目下的models文件中

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

復制代碼
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提供給我們的用於做轉換的models.Model才能將我們寫的類轉化為數據庫

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

2)字段常用參數

View Code

2、修改配置文件setting

1)django默認使用的是sqlite3數據庫,我們使用的是mysql數據庫所以需要修改配置

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

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

重新配置

復制代碼
DATABASES = {

    'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'blog', #你的數據庫名稱 數據庫需要自己提前建好 'USER': 'root', #你的數據庫用戶名 'PASSWORD': '', #你的數據庫密碼 'HOST': '', #你的數據庫主機,留空默認為localhost 'PORT': '3306', #你的數據庫端口  } } 
復制代碼

3、創建表命令

1)同步更改數據庫表或字段

老版本:
python manage.py syncdb
     
Django 1.7.1 及以上的版本需要用以下命令 python manage.py makemigrations python manage.py migrate

2)運行python manage.py makemigrations后我們應用下的migrations文件夾里會自動生成一個文件,是將我們寫的類進一步轉化:

復制代碼
# -*- 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后表就插入到我們的數據庫中了

4)注意:

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

No module named "MySQLdb"

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

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

import pymysql pymysql.install_as_MySQLdb()

運行后在數據庫里查看:

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


 

三、查看表

1、先在視圖函數view中將數據取出來

from app01 import models #app01是應用名 def index(request): # 從數據庫取出所有書籍對象 bookList=models.Book.objects.all() # [bookObj1,.....] return render(request,"index.html",{"bookList":bookList})

查詢相關

<1> all():    查詢所有結果
<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()。它運行時立即刪除對象而不返回任何值。

比如我們給表中添加一個刪除按鈕來實現點擊按鈕后數據庫每條記錄的刪除

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 分發

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

3、視圖函數view實現刪除

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM