python - 声明式查询中的 Python Pony ORM 单行属性
问题描述
我正在尝试在选择查询中使用单行属性。由于
0.7.4 & 0.7.5应该是可能的。简单的操作,如+ (inside value_at_end property)
工作,但我无法使用split()
等。关于 0.7.4 和 0.7.5 更新应该是可能的。
class Foo(db.Entity):
_table_ = "sample_table"
some_string_with_value_at_end = Optional(str)
@property
def value_at_end(self):
return self.some_string_with_value_at_end.split('/')[-1]
@classmethod
def get_values_at_end(cls):
values = select(v.value_at_end for v in cls)
return values
items = Foo.get_values_at_end()
for each in items:
print(each)
得到错误:
AttributeError: 'str' object has no attribute 'split': self.some_string_with_value_at_end.split (inside Foo.value_at_end)
现在我正在使用raw_sql但想制作更多的python,应该可以吗?
感谢帮助!
解决方案
此时 Pony 不知道如何将str.split
方法调用转换为 SQL。
理论上这是可能的,但我们需要知道每个支持的数据库的适当翻译。对于其中一些人来说,结果表达式可能看起来很复杂,就像这个答案一样
所以我怀疑我们会str.split
在不久的将来增加对翻译的支持。也许您更容易使用 JSON 列并在其中存储字符串值数组。然后你可以写
class Foo(db.Entity):
str_items = Optional(Json)
@property
def value_at_end(self):
return self.str_items[-1]
@classmethod
def get_values_at_end(cls):
values = select(v.value_at_end for v in cls)
return values
现在使用负索引来访问 JSON 数组的最后一项应该可以在 PostgreSQL 中工作,我认为我们也应该为其他数据库添加它,它看起来比在str.split
所有可能的用例中添加方法要容易得多。
推荐阅读
- makefile - 这个makefile规则是怎么调用的?
- assembly - 用汇编语言计算 a^2 - 3b
- python - Webscraping Selenium / 处理弹出窗口?
- flutter - Flutter file_picker 包为所有文件详细信息提供空值
- angular - Angular PWA 更新服务放在哪里?
- ios - 为什么我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?
- tensorflow - 在 TF 2.3 和 tf.keras 中更改全卷积网络输入形状
- angular - Angular9 rxjs-behaviorsubject 不适用于不同的组件?
- c - 这个程序以什么方式访问非法内存?
- reactjs - 如果值不变,Redux 触发减速器