12. 数组数据类型支持

作者: gthank | 来源:发表于2020-05-11 14:02 被阅读0次

12. 数组数据类型支持

概述

从Pony 0.7.7.7版本开始,我们为PostgreSQL、CockroachDB和SQLite增加了对数组类型的支持,它实现了PostgreSQL的数组类型,JSON类型更灵活,但在某些情况下,Array类型可能更有效。

声明一个Array属性

每个数组都应该有一个指定类型的项目,这个数组可以存储。支持的类型有:int、float和str

在Pony中声明一个数组属性时,你应该使用IntArrayFloatArrayStrArray类型,这些类型可以从pony.orm包中导入。

from pony.orm import *

db = Database()


class Product(db.Entity):
    id = PrimaryKey(int, auto=True)
    name = Required(str)
    stars = Optional(IntArray)
    tags = Optional(StrArray)


db.bind('sqlite', ':memory:')
db.generate_mapping(create_tables=True)

 with db_session:
     Product(name='Apple MacBook', stars=[0, 2, 0, 5, 10], tags=['Apple', 'Notebook'])

可选数组默认声明为NOT NULL,并使用空数组作为默认值。要使其为空数组,你应该传递nullable=True选项。

对于PostgreSQL,如果你设置index=True,Pony会创建gin索引,对于SQLite索引将被忽略。

操作数组

访问数组项

在PonyORM中,数组的索引是基于0的,就像Python中一样,可以使用负索引来访问数组的末尾,你也可以使用数组切片。

选择数组中的特定项:

select(p.tags[2] for p in Product)[:] # 第三元素
select(p.tags[-1] for p in Product)[:] # 最后一个元素

使用切片

select(p.tags[:5] for p in Product)[:] # 前五名元素

分片不支持步长(step)

检查项目或项目列表是否在数组中:

select(p for p in Product if 'apple' in p.tags)[:]
select(p for p in Product if ['LCD', 'DVD', 'SSD'] in p.tags)[:]

更改数组中的项目

product = Product.select().first()
product.tags.remove('factory-new')
product.tags.append('reconstructed')

相关文章

  • 12. 数组数据类型支持

    12. 数组数据类型支持 概述 从Pony 0.7.7.7版本开始,我们为PostgreSQL、Cockroach...

  • Dart 2 (二) 数据类型

    数据类型 Dart中支持以下数据类型: Numbers Strings Booleans List(数组) Map...

  • Dart(三)数据类型

    数据类型 Dart中支持以下数据类型: Numbers Strings Booleans List(数组) Map...

  • (转)使用MFC的数组类 vc多线程(续)关于_beginthr

    2012-03-28 MFC 的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型。C++的常规数组在...

  • 开发遇到的坑

    1、使用NSUserDefaults存储数组(自定义元素)崩溃,NSUserDefaults支持的数据类型有NSS...

  • C# 轻松开发入门 第二节(幕课网)

    数组 数组的声明:数据类型[ ] 数组名 = new 数据类型[长度];,C#的数组是只能储存一种数据类型。数组经...

  • day2.6_数组

    数组概述 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。 创建数组对象...

  • java数组

    1、声明数组语法:数据类型[ ]数组名;或数据类型 数组名[ ]; 2、分配空间语法:数组名 = new 数据类型...

  • js数组

    js中数据类型分为基本数据类型和复杂(引用)数据类型,数组是属于复杂数据类型 数组的创建 数组的访问与设置 数组的...

  • JAVA(5)数组

    数组数组是在内存中存储相同数据类型的连续的空间 声明数组 语法: 数据类型[ ] 数组名;或者 数据类型 数...

网友评论

    本文标题:12. 数组数据类型支持

    本文链接:https://www.haomeiwen.com/subject/afjunhtx.html