- 浏览: 307413 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ae6623:
ae6623 写道大哥,你是怎么知道它对临时文件有限制的,我也 ...
导出excel2007 poi3.8 -
ae6623:
大哥,你是怎么知道它对临时文件有限制的,我也发现这个bug了, ...
导出excel2007 poi3.8 -
coralandbill:
下载不了啊 能不能给我发一个simpleProj.war包啊 ...
jqgrid使用步骤及说明 -
maojin:
这是jqgrid几?那个电话号码校验的函数能调到吗?
jqgrid使用步骤及说明 -
qingyezhu:
请问,用poi3.8中的wordtohtmlconver类将d ...
导出excel2007 poi3.8
__exact 精确等于 like 'aaa'
__iexact 精确等于 忽略大小写 ilike 'aaa'
__contains 包含 like '%aaa%'
__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以...开头
__istartswith 以...开头 忽略大小写
__endswith 以...结尾
__iendswith 以...结尾,忽略大小写
__range 在...范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __unicode__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def __unicode__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateTimeField()
authors = models.ManyToManyField(Author)
def __unicode__(self):
return self.headline
这
是model,有blog,author,以及entry;其中entry分别与blog与author表关 联,entry与blog表是通过
外键(models.ForeignKey())相连,属于一对多的关系,即一个entry对应多个blog,entry与author是多对多的关系,
通过modles.ManyToManyField()实现。
一、插入数据库,用save()方法实现,如下:
>>> from mysite.blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()
二、更新数据库,也用save()方法实现,如下:
>> b5.name = 'New name'
>> b5.save()
保存外键和多对多关系的字段,如下例子:
更新外键字段和普通的字段一样,只要指定一个对象的正确类型。
>>> cheese_blog = Blog.objects.get
(name="Cheddar Talk")
>>> entry.blog = cheese_blog
>>> entry.save()
更新多对多字段时又一点不太一样,使用add()方法添加相关联的字段的值。
>> joe = Author.objects.create(name="Joe")
>> entry.authors.add(joe)
三、检索对象
>>> Blog.objects
<django
.db.models.manager.Manager object at ...>
>>> b = Blog(name='Foo', tagline='Bar')
>>> b.objects
Traceback:
...
AttributeError: "Manager isn't accessible via Blog instances."
1、检索所有的对象
>>> all_entries = Entry.objects.all()
使用all()方法返回数据库中的所有对象。
2、检索特定的对象
使用以下两个方法:
fileter(**kwargs)
返回一个与参数匹配的QuerySet,相当于等于(=).
exclude(**kwargs)
返回一个与参数不匹配的QuerySet,相当于不等于(!=)。
Entry.objects.filter
(pub_date__year=2006)
不使用Entry.objects.all().filter
(pub_date__year=2006),虽然也能运行,all()最好再获取所有的对象时使用。
上面的例子等同于的sql语句:
slect * from entry where pub_date_year='2006'
链接过滤器:
>>> Entry.objects.filter
(
... headline__startswith='What'
... ).exclude(
... pub_date__gte=datetime.now()
... ).filter
(
... pub_date__gte=datetime(2005, 1, 1)
... )
最后返回的QuerySet是headline like 'What%' and put_date<now() and pub_date>2005-01-01
另外一种方法:
>> q1 = Entry.objects.filter
(headline__startswith="What")
>> q2 = q1.exclude(pub_date__gte=datetime.now())
>> q3 = q1.filter
(pub_date__gte=datetime.now())
这种方法的好处是可以对q1进行重用。
QuerySet是延迟加载
只在使用的时候才会去访问数据库,如下:
>>> q = Entry.objects.filter
(headline__startswith="What")
>>> q = q.filter
(pub_date__lte=datetime.now())
>>> q = q.exclude(body_text__icontains="food")
>>> print q
在print q时才会访问数据库。
其他的QuerySet方法
>>> Entry.objects.all()[:5]
这是查找前5个entry表里的数据
>>> Entry.objects.all()[5:10]
这是查找从第5个到第10个之间的数据。
>>> Entry.objects.all()[:10:2]
这是查询从第0个开始到第10个,步长为2的数据。
>>> Entry.objects.order_by('headline')[0]
这是取按headline字段排序后的第一个对象。
>>> Entry.objects.order_by('headline')[0:1].get
()
这和上面的等同的。
>>> Entry.objects.filter
(pub_date__lte='2006-01-01')
等同于SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';
>>> Entry.objects.get
(headline__exact="Man bites dog")
等同于SELECT ... WHERE headline = 'Man bites dog';
>>> Blog.objects.get
(id__exact=14) # Explicit form
>>> Blog.objects.get
(id=14) # __exact is implied
这两种方式是等同的,都是查找id=14的对象。
>>> Blog.objects.get
(name__iexact="beatles blog")
查找name="beatles blog"的对象,不去饭大小写。
Entry.objects.get
(headline__contains='Lennon')
等同于SELECT ... WHERE headline LIKE '%Lennon%';
startswith 等同于sql语句中的 name like 'Lennon%',
endswith等同于sql语句中的 name like '%Lennon'.
>>> Entry.objects.filter
(blog__name__exact='Beatles Blog')
查找entry表中外键关系blog_name='Beatles Blog'的Entry对象。
>>> Blog.objects.filter
(entry__headline__contains='Lennon')
查找blog表中外键关系entry表中的headline字段中包含Lennon的blog数据。
Blog.objects.filter
(entry__author__name='Lennon')
查找blog表中外键关系entry表中的author字段中包含Lennon的blog数据。
Blog.objects.filter
(entry__author__name__isnull=True)
Blog.objects.filter
(entry__author__isnull=False,entry__author__name__isnull=True)
查询的是author_name为null的值
Blog.objects.filter
(entry__headline__contains='Lennon',entry__pub_date__year=2008)
Blog.objects.filter
(entry__headline__contains='Lennon').filter
( entry__pub_date__year=2008)
这两种查询在某些情况下是相同的,某些情况下是不同的。第一种是限制所有的blog数据的,而第二种情况则是第一个filter
是
限制blog的,而第二个filter
则是限制entry的
>>> Blog.objects.get
(id__exact=14) # Explicit form
>>> Blog.objects.get
(id=14) # __exact is implied
>>> Blog.objects.get
(pk=14) # pk implies id__exact
等同于select * from where id=14
# Get
blogs entries with id 1, 4 and 7
>>> Blog.objects.filter
(pk__in=[1,4,7])
等同于select * from where id in{1,4,7}
# Get
all blog entries with id > 14
>>> Blog.objects.filter
(pk__gt=14)
等同于select * from id>14
>>> Entry.objects.filter
(blog__id__exact=3) # Explicit form
>>> Entry.objects.filter
(blog__id=3) # __exact is implied
>>> Entry.objects.filter
(blog__pk=3) # __pk implies __id__exact
这三种情况是相同的
>>> Entry.objects.filter
(headline__contains='%')
等同于SELECT ... WHERE headline LIKE '%\%%';
Caching and QuerySets
>>> print [e.headline for e in Entry.objects.all()]
>>> print [e.pub_date for e in Entry.objects.all()]
应改写为:
>> queryset = Poll.objects.all()
>>> print [p.headline for p in queryset] # Evaluate the query set.
>>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation.、
这样利用缓存,减少访问数据库的次数。
四、用Q对象实现复杂的查询
Q(question__startswith='Who') | Q(question__startswith='What')
等同于WHERE question LIKE 'Who%' OR question LIKE 'What%'
Poll.objects.get
(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
等同于SELECT * from polls WHERE question LIKE 'Who%' AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')
Poll.objects.get
(
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
question__startswith='Who')
等同于Poll.objects.get
(question__startswith='Who', Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)))
五、比较对象
>>> some_entry == other_entry
>>> some_entry.id == other_entry.id
六、删除
Entry.objects.filter
(pub_date__year=2005).delete()
b = Blog.objects.get
(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()
Entry.objects.all().delete()
删除所有
七、一次更新多个值
# Update all the headlines with pub_date in 2007.
Entry.objects.filter
(pub_date__year=2007).update(headline='Everything is the same')
>>> b = Blog.objects.get
(pk=1)
# Change every Entry so that it belongs to this Blog.
>>> Entry.objects.all().update(blog=b)
如果用save()方法,必须一个一个进行保存,需要对其就行遍历,如下:
for item in my_queryset:
item.save()
关联对象
one-to-many
>>> e = Entry.objects.get
(id=2)
>>> e.blog # Returns the related Blog object.
>>> e = Entry.objects.get
(id=2)
>>> e.blog = some_blog
>>> e.save()
>>> e = Entry.objects.get
(id=2)
>>> e.blog = None
>>> e.save() # "UPDATE blog_entry SET blog_id = NULL ...;"
>>> e = Entry.objects.get
(id=2)
>>> print e.blog # Hits the database to retrieve the associated Blog.
>>> print e.blog # Doesn't hit the database; uses cached version.
>>> e = Entry.objects.select_related().get
(id=2)
>>> print e.blog # Doesn't hit the database; uses cached version.
>>> print e.blog # Doesn't hit the database; uses cached version
>>> b = Blog.objects.get
(id=1)
>>> b.entry_set.all() # Returns all Entry objects related to Blog.
# b.entry_set is a Manager that returns QuerySets.
>>> b.entry_set.filter
(headline__contains='Lennon')
>>> b.entry_set.count()
>>> b = Blog.objects.get
(id=1)
>>> b.entries.all() # Returns all Entry objects related to Blog.
# b.entries is a Manager that returns QuerySets.
>>> b.entries.filter
(headline__contains='Lennon')
>>> b.entries.count()
You cannot access a reverse ForeignKey Manager from the class; it must be accessed from an instance:
>>> Blog.entry_set
add(obj1, obj2, ...)
Adds the specified model objects to the related object set.
create(**kwargs)
Creates a new object, saves it and puts it in the related object set. Returns the newly created object.
remove(obj1, obj2, ...)
Removes the specified model objects from the related object set.
clear()
Removes all objects from the related object set.
many-to-many类型:
e = Entry.objects.get
(id=3)
e.authors.all() # Returns all Author objects for this Entry.
e.authors.count()
e.authors.filter
(name__contains='John')
a = Author.objects.get
(id=5)
a.entry_set.all() # Returns all Entry objects for this Author.
one-to-one 类型:
class EntryDetail(models.Model):
entry = models.OneToOneField(Entry)
details = models.TextField()
ed = EntryDetail.objects.get
(id=2)
ed.entry # Returns the related Entry object
使用sql语句进行查询:
def my_custom_sql(self):
from django
.db import connection
cursor = connection.cursor()
cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
row = cursor.fetchone()
return row
发表评论
-
django的分页机制
2011-01-24 14:11 957http://blog.csdn.net/huliuhe/ar ... -
Django settings.py中使用相对目录
2011-01-21 10:36 1056import os BASE_DIR = os.path.di ... -
settings.py 中设置访问 数据库
2011-01-21 10:31 1611Django访问数据库的设置是在settings.py中写入数 ... -
利用decorator实现Django表单防重复提交
2011-01-20 17:41 2005背景: 我的用例中不可出现重复的记录,如: ... -
model、view、事务详解
2011-01-20 15:31 1331与模型的对象关系映射 如前所述,Django 支持与模型的对 ... -
django高级应用
2011-01-19 09:40 4732Django高级应用 出自GongGeng 跳转到: 导航, ... -
Django资源列表
2010-12-13 09:46 1606最近经常在这个版面看到Django 相关扩展的介绍,而其一个 ... -
Django管理站点
2010-12-03 11:50 1169因为不对应django1.0版本,所以按书中的过程无法成功激活 ... -
pythoh django 中文教程
2010-11-25 09:45 2330非常好的学习Python 的开发教程 http://czug ... -
eclipse+pydev+django+python+mysql+python-dateutil+pil+setuptools安装
2010-11-19 12:40 46592010年1月27日,为了方便python入门的同学,我把我的 ...
相关推荐
Python Django 数据库查询方法总结 Python Django 框架中,数据库查询是非常重要的一部分,本文将总结 Python Django 中的数据库查询方法。 查询方法 在 Django 中,查询方法可以分为两类: exact 查询和 range ...
说明:该项目已停止开发,请移步新的监控项目,基于前后端分离结构:总体介绍python+Django数据库监控平台开发技术:python,django(web框架),AdminLTE(前端模板)整体架构:后端多进程数据采集+告警轮询+web前端...
Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的在线考试系统源码 Python基于Django的...
基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统...
Python Django + Bootstrap 实现用户管理系统是一种常见的Web应用开发方式,结合了Python的高效与Django框架的强大,以及Bootstrap的响应式设计。以下是对这个主题的详细解析: **Python Django** Django是Python的...
Python 连接达梦数据库可以用于各种应用程序,例如,使用 Django 进行网站开发,使用 Python 做后端。可以通过查看达梦数据库的文档和社区支持来获取更多信息。 Python 连接达梦数据库需要按照一定的步骤进行,...
之后,可以检查Django是否安装成功,并设置好开发环境,如使用Python3.5和MySQL5.6.17作为数据库。在Windows 10 64位系统上,使用Sublime Text和Anaconda进行开发。 总的来说,Django为开发者提供了强大的工具和...
使用Python编程语言 Django MySQL数据库开发的web版学生管理系统,里面附带环境搭建的详细过程和开发过程中遇到的一些bug的讲解 使用Python编程语言 Django MySQL数据库开发的web版学生管理系统,里面附带环境搭建...
- **强大的数据库功能**:Django的ORM允许开发者通过Python类定义数据模型,自动生成数据库操作接口,还可以直接执行SQL语句。 - **内置管理后台**:通过简单的配置,Django可以快速生成一个强大的后台管理界面,...
这个过程涵盖了使用Python Django框架与MySQL数据库交互的基本步骤,包括模型定义、数据库配置、视图函数创建、HTML表单以及URL路由。对于初学者或有一定基础的开发者来说,这是一个很好的实践项目,有助于理解Web...
- **ORM对象关系映射**:Django的ORM允许开发者使用Python类来定义数据库表结构,简化了数据库操作。 - **数据库迁移**:当模型发生变化时,Django的`makemigrations`和`migrate`命令帮助你更新数据库结构。 3. *...
10. **缓存(Caching)**:Django提供了多种缓存策略,包括页面级别的缓存、数据库查询缓存等,以提高性能。 11. **国际化与本地化(Internationalization & Localization)**:Django支持多语言网站的开发,可以...
开发语言:Python/python框架:django/软件版本:python3.7/数据库:mysql 5.7 数据库工具:Navicat11/开发软件:PyCharm/vscode/前端框架:vue.js 通过Python和Django开发了本次的航班查询和预定系统:包含查看订单...
【Python Django Demo项目】是一个适合初学者入门的实践项目,旨在帮助学习者了解和掌握Django框架的基础知识和核心概念。Django是一个用Python编写的高级Web开发框架,它遵循模型-视图-控制器(MVC)设计模式,强调...
在数据库方面,Django内置了对象关系映射器(ORM),允许开发者使用Python代码操作数据库,无需直接编写SQL。该项目可能使用了SQLite、MySQL或PostgreSQL等数据库,通过配置settings.py文件进行连接设置。数据库脚本...
python+django 使用mtv框架开发,web入门程序使用mysql数据库 python+django 使用mtv框架开发,web入门程序使用mysql数据库 python+django 使用mtv框架开发,web入门程序使用mysql数据库 python+django 使用mtv...
Django的ORM允许开发者用Python代码操作数据库,而无需编写SQL,这样可以简化开发流程并提高可移植性。 为了在Django项目中使用Citus,我们需要安装`citus` PostgreSQL扩展,并在Django的数据库配置中指定Citus连接...
**Python Django 博客项目与 MySQL 数据库集成详解** 在 IT 领域,Python Django 框架常被用于快速开发高效、可扩展的 Web 应用程序。结合 MySQL 数据库,我们可以创建一个功能丰富的博客系统。在这个项目中,我们...
Python-Django是构建高效、可扩展的Web应用的热门选择,尤其在教育信息化领域,它被广泛用于开发信息查询类网站。在这个项目中,我们利用Python的Django框架搭建了一个针对高校信息的查询平台,旨在为学生、家长及...