文章目录
13.10 字段
这些字段可以在playhouse.fields模块中找到。
class CompressedField
class CompressedField([compression_level=6[, algorithm='zlib'[, **kwargs]]])
参数:
- compression_level ( int ) – 0 到 9 之间的值。
- algorithm( str ) – 要么’zlib’要么’bz2’。
 使用指定算法存储压缩数据。该字段扩展 BlobField,透明地存储数据库中数据的压缩表示。
class PickleField
class PickleField
通过透明地酸洗和取消酸洗存储在字段中的数据来存储任意 Python 数据。该字段扩展BlobField. 如果该 cPickle模块可用,它将被使用。
13.11 混合属性 Hybrid Attributes
混合属性封装了在 Python 和SQL 级别运行的功能。混合属性的想法来自 SQLAlchemy 中的同名功能。考虑以下示例:
class Interval(Model):
    start = IntegerField()
    end = IntegerField()
    @hybrid_property
    def length(self):
        return self.end - self.start
    @hybrid_method
    def contains(self, point):
        return (self.start <= point) & (point < self.end)
混合属性的名称来自于length 属性的行为会根据是通过 Interval类还是Interval实例访问而有所不同。
如果通过实例访问,那么它的行为与您预期的一样。
但是,如果通过Interval.length类属性访问,则长度计算将表示为 SQL 表达式。例如:
query = Interval.select().where(Interval.length > 5)
此查询将等效于以下 SQL:
SELECT "t1"."id", "t1"."start", "t1"."end"
FROM "interval" AS t1
WHERE (("t1"."end" - "t1"."start") > 5)
该playhouse.hybrid模块还包含一个装饰器,用于实现可以接受参数的混合方法。与混合属性一样,当通过模型实例访问时,函数会按原样正常执行。但是,当在类上调用混合方法时,它将生成一个 SQL 表达式。
例子:
query = Interval.select().where(Interval.contains(2))
此查询等效于以下 SQL:
SELECT "t1"."id", "t1"."start", "t1"."end"
FROM "interval" AS t1
WHERE (("t1"."start" <= 2) AND (2 < "t1"."end"))
对于 Python 实现与 SQL 实现略有不同的情况,还有一个额外的 API。让我们为模型添加一个radius方法Interval。因为该方法计算的是绝对值,所以我们将 Pythonabs()函数用于实例部分,将fn.ABS()SQL 函数用于类部分。
class Interval(Model):
    start = IntegerField()
    end = IntegerField()
    @hybrid_property
    def length(self):
        return self.end - self.start
    @hybrid_property
    
 
                   
                   
                   
                   本文详细介绍了DjangoPlayhouseORM中的CompressedField、PickleField、HybridAttributes(包括hybrid_method和hybrid_property)以及Key/ValueStore模块的KeyValue类,展示了如何在Python和SQL级别混合操作,以及高效的数据存储和检索方法。
本文详细介绍了DjangoPlayhouseORM中的CompressedField、PickleField、HybridAttributes(包括hybrid_method和hybrid_property)以及Key/ValueStore模块的KeyValue类,展示了如何在Python和SQL级别混合操作,以及高效的数据存储和检索方法。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
                     
              
             
                   36
					36
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
					 
					 
					


 
            