django模型讲解:化抽象为具体

本文将抽象的东西尽可能的可视化,目的是让基础不太好的同学理解的更清晰。本系列Django教程大多来自菜鸟教程,加入了一些个人理解和可视化部分。

工具:MySQL Workbench 6.1.7 CE
   pycharm

数据库配置:

setting.py下DATABASES
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'test',
    'USER': 'root',
    'PASSWORD':'***',
    'HOST':'127.0.0.1',
    'PORT':'3306',
    }}`

修改models.py文件

# models.py
from django.db import models
class Test(models.Model):
     name = models.CharField(max_length=20)```
  以上的类名代表了数据库表名,如app名为blog,则此表名为*blog_test*,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
- 在命令行中运行,或者在pycharm编程的可以直接点击下方*Terminal*:
`$ python manage.py migrate   # 创建表结构`
`$ python manage.py makemigrations yourapp.name  # 让 Django 知道我们在我们的模型有一些变更`
![](http://upload-images.jianshu.io/upload_images/2326415-8c7fa7ab7f73c8e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
`$ python manage.py migrate yourapp.name   # 创建表结构`
![](http://upload-images.jianshu.io/upload_images/2326415-256011a4e11c7360.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
数据库里看了一下出现了这么多表
![](http://upload-images.jianshu.io/upload_images/2326415-d1cdd94e546d9dc1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 数据库操作
  接下来我们添加 testdb.py 文件,并修改 urls.py:
```javascript
from . import testdb
urlpatterns = {
    url(r'^testdb$', testdb.testdb),
}```
- **添加数据**
数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:
```javascript
#testdb.py
def testdb(request):
    test1 = Test(name = 'vonhehe')
    test1.save()
    return HttpResponse("<p>数据添加成功</p>")```

  我们运行一下看看:
![](http://upload-images.jianshu.io/upload_images/2326415-109bebed80dd3f6a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  再到数据库看看,数据添加到了blog_test表中
![](http://upload-images.jianshu.io/upload_images/2326415-8a44d46f9fe7a35a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- **获取数据**
```javascript
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
def testdb(request):# 数据库操作
  #初始化
      response = ""
      response1 = ""
    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM blog_test
    list = Test.objects.all()
        
    # filter相当于SQL中的WHERE,可设置条件过滤结果
    response2 = Test.objects.filter(id=1) 
    
    # 获取单个对象
    response3 = Test.objects.get(id=1) 
    
    # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
    Test.objects.order_by('name')[0:2]
    
    #数据排序
    Test.objects.order_by("id")
    
    # 上面的方法可以连锁使用
    Test.objects.filter(name="vonhehe").order_by("id")
    # 输出所有数据

    for var in list:
        response1 += var.name + " </br>"
    response = response1
    return HttpResponse("<p>" + response + "</p>")```
运行结果如下:
![](http://upload-images.jianshu.io/upload_images/2326415-a107154e8b7586b3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- **更新数据**
修改数据可以使用 save() 或 update():
```javascript
# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库更新操作
def testdb(request):
    # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
    test1 = Test.objects.get(id=1)
    test1.name = 'Google'
    test1.save()
    
    # 另外一种方式
    #Test.objects.filter(id=1).update(name='Google')
    
    # 修改所有的列
    # Test.objects.all().update(name='Google')
    
    return HttpResponse("<h1>修改成功</h1>")```
运行结果如下:
![](http://upload-images.jianshu.io/upload_images/2326415-d54afa30d6727e0f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在数据库中:
![](http://upload-images.jianshu.io/upload_images/2326415-f02e1f7881df1f77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- **删除数据**
我们先添加一个数据:
`Test(name = 'vonhehe').save()`
![](http://upload-images.jianshu.io/upload_images/2326415-c5fd0b401a5053af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```javascript
# 数据库删除操作
def testdb(request):
    # 删除id=1的数据
    test1 = Test.objects.get(id=1)
    test1.delete()
    
    # 另外一种方式
    # Test.objects.filter(id=1).delete()
    
    # 删除所有数据
    # Test.objects.all().delete()
    return HttpResponse("<p>删除成功</p>")```
运行结果如下:
![](http://upload-images.jianshu.io/upload_images/2326415-2da472ad5f1676ad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
数据库如下,id=1行已被删除:
![](http://upload-images.jianshu.io/upload_images/2326415-3ee148e34a948c8b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***
---本文参考[【菜鸟教程】](http://www.runoob.com/django/django-model.html)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容