Django数据建模——与数据库的交互
来源:互联网 发布:android网络定位源码 编辑:程序博客网 时间:2024/06/06 07:38
- 数据库配置
DATABASES = {
'default':{
'ENGINE':'mysql',# Add'postgresql_psycopg2','postgresql', 'mysql', 'sqlite3'or 'oracle'.
'NAME':'mydb', # Or path to database file if using sqlite3.
'USER':'root', # Not used with sqlite3.
'PASSWORD':'123456', # Not used with sqlite3.
'HOST':'127.0.0.1', # Set to empty stringfor localhost. Not used with sqlite3.
'PORT':'3306', # Set to empty stringfor default. Not used with sqlite3.
}
}
如果没有显示什么错误信息,那么你的数据库配置是正确的。
- project 与 app
python manage.py startapp books
在配置文件(settings.py)中添加该app:
MIDDLEWARE_CLASSES= (
# 'django.middleware.common.CommonMiddleware',
# 'django.contrib.sessions.middleware.SessionMiddleware',
# 'django.contrib.auth.middleware.AuthenticationMiddleware',
)
INSTALLED_APPS = (
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.sites',
'mysite.books',
)
- 添加models
from django.dbimport 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()
python manage.py validate模型确认没问题了,运行下面的命令来生成 CREATE TABLE 语句(如果你使用的是Unix,那么可以启用语法高亮):
python manage.py sqlall books
sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。Django提供了一种更为简易的提交SQL语句至数据库的方法:
python manage.py syncdb
一旦你创建了模型,Django自动为这些模型提供了高级的Python API。 运行python manage.py shell 并输入下面的内容试试看:
>>>from books.modelsimport Publisher
>>> p1= Publisher(name='Apress',address='2855 Telegraph Avenue',
... city='Berkeley',state_province='CA',country='U.S.A',
... website='http://www.apress.com/')
>>> p1.save()
>>> p2= Publisher.objects.create(name="0'Reilly",
... address='10 Fawcett St.', city='Cambridge',
... state_province='MA', country='U.S.A.',
... website='http://www.oreilly.com/')
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object>, <Publisher: Publisher object>]
- 添加模块的字符串表现
from django.dbimport models
# Create your models here.
class Publisher(models.Model):
......
def __unicode__(self):
return self.name
class Author(models.Model):
......
def __unicode__(self):
return u'%s %s'%(self.first_name,self.last_name)
class Book(models.Model):
......
def __unicode__(self):
return self.title
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: 0'Reilly>]
请确保你的每一个模型里都包含 __unicode__() 方法,这不只是为了交互时方便,也是因为 Django会在其他一些地方用__unicode__() 来显示对象。
- 数据操作
>>> p.name= 'Apress Publishing'
>>> p.save()
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录。以下示例演示如何将所有Publisher的country字段值由’U.S.A’更改为’USA’
>>> Publisher.objects.all().update(country='USA')
2
update()方法会返回一个整型数值,表示受影响的记录条数。 在上面的例子中,这个值是2。
2. 数据过滤: 在Django API中,我们可以使用“filter()”方法对数据进行过滤:
>>> Publisher.objects.filter(name='Apress')
[<Publisher: Apress>]
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA")
[<Publisher: Apress>]
>>> Publisher.objects.filter(name__contains="press")
[<Publisher: Apress>]
3. 获取单个对象:相对列表来说,有些时候我们更需要获取单个的对象,“get()”方法就是在此时使用的:
>>> Publisher.objects.get(name="Apress")
<Publisher: Apress>
4.数据排序:在你的 Django 应用中,你或许希望根据某字段的值对检索结果排序,比如说,按字母顺序。 那么,使用 order_by() 这个方法就可以搞定了。
>>> Publisher.objects.order_by("name")
[<Publisher: Apress>,<Publisher: O'Reilly>]
>>> Publisher.objects.order_by("state_province","address")
[<Publisher: Apress>,<Publisher: O'Reilly>]
>>> Publisher.objects.order_by("-name")
[<Publisher: O'Reilly>,<Publisher: Apress>]
class Publisher(models.Model):
......
class Meta:
ordering = ['name']
5. 连锁查询:通常我们需要同时进行过滤和排序查询的操作。 因此,你可以简单地写成这种“链式”的形式:
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name")
[<Publisher: O'Reilly>,<Publisher: Apress>]
6. 限制返回的数据:
>>> Publisher.objects.order_by('name')[0]
<Publisher: Apress>
>>> Publisher.objects.order_by('name')[0:2]
6.删除对象:删除数据库中的对象只需调用该对象的delete()方法即可:
>>> p= Publisher.objects.get(name="O'Reilly")
>>> p.delete()
>>> Publisher.objects.all()
[<Publisher: Apress Publishing>]
>>> Publisher.objects.filter(country='USA').delete()
>>> Publisher.objects.all().delete()
>>> Publisher.objects.all()
[]
多表查询使用:from django.db import connection
- Django数据建模——与数据库的交互
- python django 与数据库的交互
- Pytho django与数据库的交互
- Django视图,与数据库交互并返回数据
- Django视图,与数据库交互并返回数据
- Django和数据库打交道:数据建模
- 数据建模与数据库设计——基本概念
- Python网络编程05----django与数据库的交互
- django(1)——使用Django搭建一个无数据交互的静态网页
- InTouch 与关系数据库的数据交互
- Django学习笔记之【Django与数据库交互】
- 架构设计—数据库的性能与建模
- 数据仓库建模与数据库建模的比较
- Django框架下的模板数据交互
- django 数据库查询—如何获取指定范围的数据
- Android客户端与数据库交互数据的简单学习
- The Django Book【第5章 与数据库交互:模型】
- Database—数据库建模
- '#' 和 '##' 的作用
- 模拟随机访问文件:shelve模块
- 良好的编程习惯 (七)代码的编译、审查---常用工具软件
- 北京市护照办理可以加急嘛?|最快几天领取?
- 基础计算机网络——网络安全 (Network Security)笔记
- Django数据建模——与数据库的交互
- C 语言细节
- 激光的安全等级简介
- 安装mysql,在./configure时出现错误:error: No curses/termcap library found的解决办法
- tomcat的编码设置(转)
- Windows socket编程 udp协议传送封装自定义帧
- HDU4436 后缀数组
- win7安装IIS及将网站发布到IIS上
- 黑马程序员----JAVA----面向对象小结(2)----