MyException - 我的异常网
当前位置:我的异常网» Go » (转)Django 模型(3)

(转)Django 模型(3)

www.MyException.Cn  网友分享于:2013-12-30  浏览:0次
(转)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://www.wwaattssuunn.com/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>")

 

文章评论

“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
我的丈夫是个程序员
我的丈夫是个程序员
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员都该阅读的书
程序员都该阅读的书
每天工作4小时的程序员
每天工作4小时的程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
 程序员的样子
程序员的样子
程序员的鄙视链
程序员的鄙视链
总结2014中国互联网十大段子
总结2014中国互联网十大段子
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员必看的十大电影
程序员必看的十大电影
代码女神横空出世
代码女神横空出世
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java程序员必看电影
Java程序员必看电影
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
漫画:程序员的工作
漫画:程序员的工作
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
中美印日四国程序员比较
中美印日四国程序员比较
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员应该关注的一些事儿
程序员应该关注的一些事儿
为什么程序员都是夜猫子
为什么程序员都是夜猫子
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
旅行,写作,编程
旅行,写作,编程
那些争议最大的编程观点
那些争议最大的编程观点
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
我是如何打败拖延症的
我是如何打败拖延症的
10个调试和排错的小建议
10个调试和排错的小建议
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
编程语言是女人
编程语言是女人
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有