我正在尝试序列化和反序列化json映射(pyignite中的Map复杂类型)。序列化似乎可以正常运行,但是反序列化时出现错误。我不确定我的序列化是否正确,但它会转储出看起来像二进制字节数组的整数数组。
Traceback (most recent call last):
File "ignite-sql.py", line 44, in <module>
print([[result[0], result[1], result[2], Map.from_python(result[3])]
for result in results])
File "ignite-sql.py", line 44, in <listcomp>
print([[result[0], result[1], result[2], Map.from_python(result[3])]
for result in results])
File "env/lib/python3.7/site-packages/pyignite/datatypes/complex.py", line 276, in from_python
for k, v in value.items():
AttributeError: 'list' object has no attribute 'items'
这是最小的例子
client = Client()
client.connect('127.0.0.1', 10800)
PRESENCE_TABLE = '''
CREATE TABLE IF NOT EXISTS presence (
subkey VARCHAR,
channel VARCHAR,
uuid VARCHAR,
metadata BINARY,
PRIMARY KEY (subkey, channel, uuid)
)'''
DROP_PRESENCE_TABLE = '''
DROP TABLE IF EXISTS presence
'''
INSERT_PRESENCE_TABLE = '''
INSERT INTO presence(
subkey, channel, uuid, metadata
) VALUES (?, ?, ?, ?)
'''
obj = Map.from_python({"foo":"bar"})
args = ["test","foo",str(uuid.uuid4()),obj]
client.sql(DROP_PRESENCE_TABLE)
client.sql(PRESENCE_TABLE)
client.sql(INSERT_PRESENCE_TABLE,query_args=args)
results = client.sql('select * from presence')
print([[result[0], result[1], result[2], Map.from_python(result[3])] for result in results])
答案 0 :(得分:1)
我是pyignite的作者和维护者。
我将尝试回答您的问题,但是由于我不允许在此处对问题发表评论,因此我将不得不对您尝试对代码执行的操作进行一些猜测。
我不确定您要达到什么目的,但是您可能为此目的在另一个SQL表上使用外键吗?对我而言,比将哈希表存储在SQL列中更有意义。另外,您可以对数据进行JSON化并将其存储为String
(VARCHAR)。
from_python()
方法。这些方法仅供内部使用。从用户的角度来看,它们创建了无用的字节序列。 pyignite
API背后的第一个想法是用户应该只能使用内置的Python类型在Ignite群集中存储和检索数据。所有序列化都在后台进行。没有可用的序列化方法或对象。 Simple examples是为了给您带来这个想法而写的。
Map
未记录,因此不应使用。在极少数情况下,MapObject类可以用作类型提示,而仅给pyignite
一个dict
对象是模棱两可的。请阅读文档的this section,了解如何使用类型提示。说了所有这些,希望我能为您指明正确的方向。如果不是,请尝试澄清您的问题,我会改善答案。
祝您好运,并感谢您使用pyignite
。