您的位置:首页 > 数据库 > SQL

Pyhton_Django学习笔记(五) 模型与MYSQL数据库使用

2011-07-11 18:23 771 查看
先上简单DEMO 使用MYSQL数据库显示数据

from django.shortcuts import render_to_response

import MySQLdb

def book_list(request):

db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')

cursor = db.cursor()

cursor.execute('SELECT name FROM books ORDER BY name')

names = [row[0] for row in cursor.fetchall()]

db.close()

return render_to_response('book_list.html', {'names': names})

Django提供了在配置文件中 settings.py中配置数据库的支持。

例如:在settings.py中编辑:

MANAGERS = ADMINS

DATABASES = {

'default': {

'ENGINE': 'mysql',

'NAME': 'mydb',

'USER': 'me',

'PASSWORD': 'secret',

'HOST': 'localhost',

'PORT': '',

}

}

这样在第一段代码中。可以简化成:

from django.db import connection

cursor = connection.cursor()

cursor.execute('select name from books')

names = [row[0] for row in cursor.fetchall()]

return render_to_response('book_list.html',{'name':names})
===============================================================================

下面来说下,用Django的支持做MYSQL的数据模块创建。

1、CMD项目路径下。执行:python manage.py startapp books

books是创建的模块名称,这条命令在项目下创建了一个books目录。

这个目录下包含创建生成的文件:__init__.py,models.py,tests.py,view.py

2、打开models.py 文件 编辑内容如下:

from django.db import models

class Publisher(models.Model):

name = models.CharField(max_length=30)

address = models.CharField(max_length=50)

city = models.CharField(max_length=60)

state_province = models.CharField(max_length=30)

country = models.CharField(max_length=50)

website = models.URLField()

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField()

class Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField()

完成这些代码后,激活这个模型。

3、打开settings.py 文件,定位到 INSTALLED_APPS设置节点。

先注释掉里面的自动生成对象。

并添加代码如下:

INSTALLED_APPS = (

# 'django.contrib.auth',

# 'django.contrib.contenttypes',

# 'django.contrib.sessions',

# 'django.contrib.sites',

'mysite.books',

)

现在我们创建数据库表

先在CMD中验证 model文件数据是否符合标准。 执行:python manage.py validate

如果显示 0 errors found.表示语法OK。

继续执行 python mange.py sqlall books,这个命令式帮助你生成SQL脚本,你可以复制粘贴到数据库执行操作。

还有一个方法 是直接连到数据库,并执行创建表操作。命令:python manage.py syncdb

syncdb命令是同步你得模型到数据库。它根据INSTALLED_APPS里设置的APP来检查数据库,如果表不存在,就创建。

写测试方法:

def createpub(request):
p1 = Publisher(name='Apress',address='2855 Telegraph Avenue',city='Berkeley',state_province='CA',country='U.S.A',website='http://www.sina.com.cn')
p1.save()
p2 = Publisher(name='B World',address='2866 Telegraph Avenue',city='Beijing',state_province='CN',country='HK',website='http://www.qq.com')
p2.save()
pub = Publisher.objects.filter(name='Apress')
return render_to_response('book_list.html',{'name':pub}) 写对应的模板页和URLS配置。

运行 效果如下 [<Publisher: Publisher object>, <Publisher: Publisher object>] 打印出的东西并没有得到我们想要的结果,先来解决这个问题。

修改 models.py 文件内容如下:

class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=50)
country = models.CharField(max_length=50)
website = models.URLField()
def __unicode__(self):
return self.name

class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField()
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
def __unicode__(self):
return self.title 再运行,输出正常。OBJECTS还有很多操作,这个找对应的文档查看更多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: