支持PostgreSQL的Django HStore。

hstore-field-caseinsensitive的Python项目详细描述


#hstore field

[`hstore`](http://www.postgresql.org/docs/9.0/interactive/hstore.html)
postgresql到django的扩展,假设使用的是django 1.3+,
postgresql 9.0+,psycopg 2.3+。

[jordanm/django hstore](http://github.com/jordanm/django-hstore)和
[niwibe/django orm extensions](https://github.com/niwibe/django orm extensions)盗版,但它使用完全不同的机制来扩展django,它具有以下优势:

1。不需要自定义数据库后端(代价是不支持hstore字段上的
索引)
1。不需要自定义QuerySet类,使其与
Geodjango或任何其他执行QuerySet子类
1的扩展完全兼容。支持查询中的范围查找类型(例如,``uu lt`,``uu gt`,等等…)
1。主要与South兼容(具体请参见下面的限制)


hstore field将在您向字段写入
时将数字和日期转换为字符串,但当从数据库中检索到hstore字典时,它*不会将它们*转换回原始类型。您可以将自定义的
类序列化到hstore,方法是给它一个'to-hstore'方法,该方法必须返回
一个字符串。
-hstore字段将使用'connection-created'信号自动尝试在您连接到的任何
数据库上安装configure hstore。如果将
连接到多个数据库,则可能会出现问题。
-使用south将具有"null=false"的hstorefield添加到现有模型中是有问题的,因为south无法为默认值发出正确的sql。一种解决方法是通过将sql直接放入迁移中来添加列

``python
def forwards(self,orm):
db.execute('alter table"[table]"add column"[column]"hstore not null default hstore(array[]::varchar[];')
```

alternative是添加带有"null=true"的字段,填充该字段,
然后设置"null=false"。这实际上通常被认为是良好的实践,
,因为默认值可能会导致意外的问题。

hstore必须安装在postgresql contrib文件夹中
1。如果您运行的是postgresql 9.0,那么包含"pg廑config"
的目录必须在您的"path"上


\usage


模型定义很简单:

from django.db import models
from hstore廑field import fields

class item(models.model):
name=models.charfield(最大长度=64)
data=fields.hstorefield()
````


empty=item.objects.create(name='empty')
assert empty.data=={}

empty.data['a]='1'
empty.save()
assert item.objects.get(name='something').data['a]==1'
```

r/>`` python
来自hstore_field.query import hq

```

您还可以查询hstore值:

`` python
t值
item.objects.filter(hq(data'uu a'u a'u a'u a'u a'uu a'u accucuu a'a'u exact'1']])相当于item.objects.filter(hq(data'u a'u a'u in=['1','2']])


sub子集按范围查询使用整数
item.objects.filter(hq(data'u a'u a'u a'u a'u accuu a'1']])
filter(hq(data'u a'u a'u a'u a'u a'u a'u a'u a'a'lt=1))

#使用float
item.objects.filter的按范围子集查询(hq(data_u a_u gt=1.1))

作为时间戳的按范围子集查询
item.objects.filter(hq(data_u a_u lte=datetime.datetime(2012,1,1,0,15))

作为日期的按范围子集查询
item.objects.filter(hq(data_u a_u gte=datetime.date(2012,1,1)))


类型将导致查询失败。

"hq"对象可以像"q"对象一样,使用`&;`、` `和` ~ `组合。但
它们只能与其他"hq"对象组合,而不能与任何"q"对象组合。
若要将"hq"对象与"q"对象组合,必须首先将"hq"对象包装到"q"对象中。例如:

`` python
item.objects.filter(hq(data_u a_u lt=10)&hq(data_u b_u lt=20))是!

item.objects.filter(q(hq(data_u a_u lt=10))&q(data_u name="foo"))是的!

item.objects.filter(hq(data_u a_u lt=10)&q(data_u name="foo"))否!
```

range查询不是特别快,因为它们需要表扫描,并且需要将每个记录的hstore->;键从字符串转换为另一种类型。但是,
它比将整个表作为
django模型对象发送到应用程序层并在那里过滤它们快得多(在有限的测试中,速度快了3-6倍)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
部署在kubernetes上时,微服务中服务间通信中的java连接超时问题   java Nway合并对2G字符串文件进行排序   java如何使用FlexJson按特定顺序序列化对象和属性   如何在java布尔方法中导入文本文件   swing需要帮助在我的Java GUI中实现用户输入的侦听器   java如何读取枚举中Spring Messagesource的内容?   每个Ajaxcall上(之前和之后)的java Javascript   java compareTo(Comparable)方法对于Comparable类型未定义   带换行符的java Bash输入重定向   使用Spring授权标记检查用户是否登录时发生java错误?   使用大尺寸(100000)数组执行快速排序时出现Java StackOverflower错误   java forEach迭代器标记   Java ClassNotFound异常,Maven依赖项作为JAR   java将HQL转换为SQL查询   java正在将片段列表发送到FragmentPagerAdapter   java onActivityResult应该调用super。onActivityResult   java如果我导入一个超类,我也需要导入它的子类吗?   java是否可以通过openid协议对aadhar进行身份验证