Python网络编程05----django与数据库的交互

介绍

Django为多种数据库后台提供了统一的调用API,在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。我们可以使用基于对象的方法,来操纵关系型数据库。


设置数据库

设置数据库需要修改settings.py文件
如果使用的数据库是mysql:
[python] view plaincopy
  1. DATABASES = {  
  2.     ‘default‘: {  
  3.         ‘ENGINE‘ :  "django.db.backends.mysql"  
  4.         ‘NAME‘ : "djangodb"  
  5.         ‘HOST‘ : "localhost"  
  6.         ‘USER‘ : "root"  
  7.         ‘PASSWORD‘ : "123456"   
  8.     }  
  9. }  
PORT如果不设置,会使用默认端口3306
如果没有安装mysql,你也可以使用sqlite。SQLite非常适合测试,甚至可以部署在没有大量并发写入的情况下。
由于SQLite使用的本地文件系统作为存储介质并且用原生的文件系统权限来做访问控制,像主机、端口、用户、密码这种信息统统不需要
只需要输入如下信息:
[python] view plaincopy
  1. DATABASES = {  
  2.     ‘default‘: {  
  3.         ‘NAME‘: r‘C:\mysite\db\test.db‘,              #db目录需要自己创建  
  4.         ‘ENGINE‘‘django.db.backends.sqlite3‘,  
  5.     }  
  6. }              

设计Model

在传统的关系型数据库中,数据模型是表。在Django下,一个表为一个类。表的每一列是该类的一个属性。在models.py中,我们创建一个只有一列的表,即只有一个属性的类:
from django.db import models

class Test(models.Model):                         #用于定义数据模型的类
    name = models.CharField(max_length=100)       #name列,数据类型为char,长度为100
    def __unicode__(self):
        return self.name
命令Django同步数据库。Django根据models.py中描述的数据模型,在MySQL中真正的创建各个关系表:$python manage.py syncdb
技术分享

设置View

事先向数据库中插入两条数据
技术分享
下面我们从数据库中取出数据,并返回给http请求。在blog/views.py中,添加视图。对于对应的请求,我们将从数据库中读取所有的记录,然后返回给客户端:

# -*- coding: utf-8 -*-
from django.http import HttpResponse

from blog.models import Test

def outStr(request):
    blog_list = Test.objects.all()
    blog_str  = map(str, blog_list)
    return HttpResponse("<p>" + ' '.join(blog_str) + "</p>")

为了让http请求能找到上面的程序,在blog/urls.py增加url链接:
from django.conf.urls import patterns, include, url

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'myweb.views.home', name='home'),
    url(r'^$', 'blog.views.outStr'),
)

输入python manage.py runserver运行服务器
访问127.0.0.1:8000/blog
技术分享

下一讲:



如果有什么疑问欢迎到我的微信公众号提问~
技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。