`

(转)Django 模型(三)

阅读更多

转自:http://www.runoob.com/django/django-model.html

 

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。

Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。

MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql 作为实例进行介绍。你可以通过本站的 MySQL 教程 了解更多Mysql的基础知识。

如果你没安装 mysql 驱动,可以执行以下命令安装:

sudo pip install mysqlclient

注意:如果在windows上,pip命令执行失效。可以到/python/scripts下执行python pip.exe mysqlclient。但是这里可能因为网络原因而安装不成功。所以可以在以下网站:http://www.lfd.uci.edu/~gohlke/pythonlibs/#

找到mysqlclient安装包安装。

有一点要注意: 
以下是从这个网站上面检索到的mysqlclient的所有版本

Mysqlclient, a fork of the MySQL-python interface for the MySQL database.

    mysqlclient-1.3.9-cp27-cp27m-win32.whl
    mysqlclient-1.3.9-cp27-cp27m-win_amd64.whl
    mysqlclient-1.3.9-cp34-cp34m-win32.whl
    mysqlclient-1.3.9-cp34-cp34m-win_amd64.whl
    mysqlclient-1.3.9-cp35-cp35m-win32.whl
    mysqlclient-1.3.9-cp35-cp35m-win_amd64.whl
    mysqlclient-1.3.9-cp36-cp36m-win32.whl
    mysqlclient-1.3.9-cp36-cp36m-win_amd64.whl

cp35代表python3.5的版本,win32代表32位的系统,所以需要选择正确,否则安装过程会报错平台不匹配。

 

如何安装:把安装包复制进去python/scripts目录下,并输入命令: python pip.exe install ./安装包名字

即可安装完成。

 

数据库配置

我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

HelloWorld/HelloWorld/settings.py: 文件代码:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 或者使用 mysql.connector.django
        'NAME': 'test', #注意,这里需要先在DB中建立一个数据库,才能使用,要不会报找不到数据库
        'USER': 'test',
        'PASSWORD': 'test123',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

这里添加了中文注释,所以你需要在 HelloWorld/settings.py 文件头部添加 # -*- coding: UTF-8 -*-

上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。


定义模型

创建 APP

Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个 TestModel 的 app:

django-admin.py startapp TestModel

目录结构如下:

HelloWorld|--TestModel||-- __init__.py
||-- admin.py
||-- models.py
||-- tests.py
|`-- views.py

我们修改 TestModel/models.py 文件,代码如下:

HelloWorld/TestModel/models.py: 文件代码:

# models.py
fromdjango.dbimportmodels

classTest(models.Model):
    name = models.CharField(max_length=20)

以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

接下来在settings.py中找到INSTALLED_APPS这一项,如下:

INSTALLED_APPS =('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes',
'django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',
'TestModel',# 添加此项)

在命令行中运行:

$ python manage.py migrate   # 创建表结构

$ python manage.py makemigrations TestModel# 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel# 创建表结构

******如果执行manage.py migrate 报错:can't load myqsl modules很可能就是没安装mysqlclient,需要按上文安装。

 

看到几行 "Creating table…" 的字样,你的数据表就创建好了。

Creating tables ...……Creating table TestModel_test#我们自定义的表……

表名组成结构为:应用名_类名(如:TestModel_test)。

注意:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。


数据库操作

接下来我们在 HelloWorld 目录中添加 testdb.py 文件(下面介绍),并修改 urls.py:

HelloWorld/HelloWorld/urls.py: 文件代码:

fromdjango.conf.urlsimport *
from . importview,testdb

urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
]

添加数据

添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:

HelloWorld/HelloWorld/testdb.py: 文件代码:

# -*- coding: utf-8 -*-

fromdjango.httpimportHttpResponse

fromTestModel.modelsimportTest

# 数据库操作
deftestdb(request):
    test1 = Test(name='runoob')
    test1.save()
    returnHttpResponse("<p>数据添加成功!</p>")

访问 http://127.0.0.1:8000/testdb 就可以看到数据添加成功的提示。

输出结果如下:

获取数据

Django提供了多种方式来获取数据库的内容,如下代码所示:

HelloWorld/HelloWorld/testdb.py: 文件代码:

# -*- coding: utf-8 -*-

fromdjango.httpimportHttpResponse

fromTestModel.modelsimportTest

# 数据库操作
deftestdb(request):
    # 初始化
    response = ""
    response1 = ""
   
   
    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
    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="runoob").order_by("id")
   
    # 输出所有数据
    forvarinlist:
        response1 += var.name + ""
    response = response1
    returnHttpResponse("<p>" + response + "</p>")

更新数据

修改数据可以使用 save() 或 update():

HelloWorld/HelloWorld/testdb.py: 文件代码:

# -*- coding: utf-8 -*-

fromdjango.httpimportHttpResponse

fromTestModel.modelsimportTest

# 数据库操作
deftestdb(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')
   
    returnHttpResponse("<p>修改成功</p>")

删除数据

删除数据库中的对象只需调用该对象的delete()方法即可:

HelloWorld/HelloWorld/testdb.py: 文件代码:

# -*- coding: utf-8 -*-

fromdjango.httpimportHttpResponse

fromTestModel.modelsimportTest

# 数据库操作
deftestdb(request):
    # 删除id=1的数据
    test1 = Test.objects.get(id=1)
    test1.delete()
   
    # 另外一种方式
    # Test.objects.filter(id=1).delete()
   
    # 删除所有数据
    # Test.objects.all().delete()
   
    returnHttpResponse("<p>删除成功</p>")

 

分享到:
评论

相关推荐

    Python-Django模型字段加密解密您的数据并加密保存至数据库中

    luojilab-django-mirage-field-5d96836是一个这样的库,它提供了一种简单的方法来加密Django模型的字段。通过这个库,我们可以在保存到数据库之前自动加密数据,在从数据库读取后自动解密。这样,即使数据库被非法...

    Django(三)模型与数据库

    首先,Django模型是Python类,它们继承自`django.db.models.Model`基类。模型中的每个类属性都代表数据库表中的一个字段。例如,假设我们有一个`User`模型,可以这样定义: ```python from django.db import models...

    Django Admin实现三级联动的示例代码(省市区)

    Django是Python语言编写的一个开源的web框架,它采用MTV的框架模式,即Model(模型)、Template(模板)、View(视图)。Django Admin则是Django框架自带的一个后台管理系统,它提供了一个方便的管理界面给开发者...

    django-modeltranslation, 使用注册方法翻译 Django 模型.zip

    django-modeltranslation, 使用注册方法翻译 Django 模型 Modeltranslationmodeltranslation应用程序用于将现有 Django 模型的动态内容转换为任意数量的语言,而不必更改原始模型类。 它使用注册方法( 与 Django ...

    django模型专题笔记

    **Django 模型专题笔记** 在 Django 中,模型(Model)是数据库的抽象层,它是数据结构的主要定义部分,负责描述应用中的数据以及数据的行为。本笔记将深入探讨 Django 模型的各个方面,帮助你更好地理解和运用这一...

    7. Django 模型与数据库

    "Django模型与数据库"这个主题是Django核心概念中的关键部分,主要涉及如何通过Django来设计、操作和管理数据库。在这个主题中,我们将深入探讨Django模型的定义、数据库操作以及与数据库的交互方式。 首先,Django...

    django模型models中常用字段和参数

    django模型models中常用字段和参数

    Python-轻松整合Django模型的常见行为

    本文将深入探讨如何轻松整合Django模型的常见行为,以提升开发效率和应用的可维护性。 首先,让我们了解Django模型。在Django中,模型(Model)是数据库表的抽象层,用于定义数据结构和业务逻辑。通过在模型类中...

    python的Django框架模型

    Django模型通常在应用的`models.py`文件中定义。每个模型是一个Python类,继承自内置的`django.db.models.Model`基类。例如: ```python from django.db import models class Article(models.Model): title = ...

    8. Django 表单与模型

    ### Django模型(Models) **1. 模型的概念** Django模型是数据库交互的主要接口,它定义了数据库表的结构,包括字段类型、验证规则等。通过创建一个Python类,我们可以声明模型,并自动地生成数据库迁移,从而...

    django-fernet-fields, Django 模型字段的Fernet对称加密.zip

    django-fernet-fields, Django 模型字段的Fernet对称加密 django-fernet-fields Fernet 用于 Django 模型字段的对称加密,使用库。在 python 。3.3 。3.4.3.5.3.6.pypy和pypy3上,django-fernet-fiel

    Django:Django模型设计与数据库操作.docx

    Django:Django模型设计与数据库操作.docx

    django-dirtyfields, 在 Django 模型中,跟踪脏字段.zip

    django-dirtyfields, 在 Django 模型中,跟踪脏字段 Django 脏字段 跟踪 Django 模型实例上的脏字段。 Dirty表示内存和数据库值中的字段是不同的。这个软件包是兼容的,并用最新版本的Django ( 1.8.1.9.1.10.系列) ...

    django-elasticsearch, 围绕 elasticsearch py的简单包装,用于索引/搜索 Django 模型.zip

    django-elasticsearch, 围绕 elasticsearch py的简单包装,用于索引/搜索 Django 模型 django_elasticsearch是一个围绕elasticsearch的包装器,它自动化了 Django 模型的索引和搜索。如果你的elasticsearch文档/映射...

    更好的Django模型.docx

    本文主要探讨了如何优化Django模型的使用,避免常见陷阱,以及利用模型管理器和Django 1.1的新特性。 首先,Django ORM在很多情况下提供了高效的数据库交互,但如果不当使用,可能会导致低效的查询。例如,清单1中...

    轻量级Django第三章代码基于Django2.1

    在这个项目的第三章中,我们可能会看到如何利用Django的内置功能和第三方扩展来创建一个静态站点生成器。 静态站点生成器是一种工具,它允许开发者使用动态语言(如Python和Django)编写内容,然后将其转换为静态...

    基于PythonDjango模型的学生选课系统.zip

    【标题】基于Python Django模型的学生选课系统 在信息技术领域,构建一个学生选课系统是一项常见的任务,尤其在教育行业中。Python Django是一个流行的Web开发框架,以其高效、易用和全面的功能而备受赞誉。本项目...

    Python-动态创建一个模型的多个tablename并通过DjangoORM操作

    接下来,我们可以像操作常规Django模型一样操作这些动态模型。例如,创建、查询、更新和删除数据: ```python # 创建数据 table1_instance = Table1(common_field='data1') table1_instance.save() # 查询数据 ...

    Kai119394#Django#04-Django模型基本操作1

    Django模型基本操作开发流程配置数据库定义模型类生成迁移文件执行迁移生成数据表使用模型类进行增删改查概述:对象——关系——印射任务:根据对象的类型生成表结构

    django-regex-field:在 Django 模型中存储正则表达式

    在 Django 模型中存储正则表达式。 简要概述 Django 正则表达式字段应用程序为存储正则表达式的 Django 模型提供自定义字段。 这提供了轻松存储正则表达式并将它们作为模型中编译的正则表达式访问的能力。 存储和...

Global site tag (gtag.js) - Google Analytics