我在炼金术中有一个Store
对象:
class Store(db.Model):
__tablename__ = "store"
_key = db.Column(db.String(), primary_key=True)
_value = db.Column(db.PickleType())
我编写了一个实用程序,允许我将其作为简单的键值存储进行写入和检索:
def get_store(key, as_obj=False):
item = Store.query.filter(Store._key == key).first()
if item:
if as_obj:
return item
else:
return item._value
else:
return False
def create_store(key, value):
already = get_store(key, as_obj=True)
if already:
already._value = value
db.session.commit()
return already._value
else:
item = Store(_key=key, _value=value)
db.session.add(item)
db.session.commit()
db.session.refresh(item)
return item._value
当我用create_store()
和get_store()
创建一个对象时,我基本上没有问题,但是有两个键-大体上与其他所有键完全相同-它们为TypeError: 'method' object does not support item assignment
提供了完整的回溯,如下所示。我应该补充一点,它们的关键结构是“tweets:namespace”。如果我搜索一个而不是的键,那么它的行为与我预期的一样。如果我搜索一个存在的键,它的行为基本上和我预期的一样,例如“tweets:myusername”就可以工作。但是,当我搜索以下内容时,它不起作用
更多信息:
查看PGadmin-我可以发现有问题的Store._key
对象没有问题,我的所有其他对象都在我希望找到它们的DB中。这似乎是炼金术的问题
~/zask/shell.py in <module>
----> 1 thing = Store.query.filter(Store._key == "tweets:ChartAlertsIO").first()
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/query.py in first(self)
3427 ret = list(self)[0:1]
3428 else:
-> 3429 ret = list(self[0:1])
3430 if len(ret) > 0:
3431 return ret[0]
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/query.py in __getitem__(self, item)
3201 return list(res)[None : None : item.step]
3202 else:
-> 3203 return list(res)
3204 else:
3205 if item == -1:
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/loading.py in instances(query, cursor, context)
98 except Exception:
99 with util.safe_reraise():
--> 100 cursor.close()
101
102
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
66 self._exc_info = None # remove potential circular references
67 if not self.warn_only:
---> 68 compat.raise_(
69 exc_value,
70 with_traceback=exc_tb,
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/util/compat.py in raise_(***failed resolving arguments***)
180
181 try:
--> 182 raise exception
183 finally:
184 # credit to
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/loading.py in instances(query, cursor, context)
78 if single_entity:
79 proc = process[0]
---> 80 rows = [proc(row) for row in fetch]
81 else:
82 rows = [
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/loading.py in <listcomp>(.0)
78 if single_entity:
79 proc = process[0]
---> 80 rows = [proc(row) for row in fetch]
81 else:
82 rows = [
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/loading.py in _instance(row)
634 # and add to the "context.partials" collection.
635
--> 636 to_load = _populate_partial(
637 context,
638 row,
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/orm/loading.py in _populate_partial(context, row, state, dict_, isnew, load_path, unloaded, populators)
780 for key, getter in populators["quick"]:
781 if key in to_load:
--> 782 dict_[key] = getter(row)
783 for key, set_callable in populators["expire"]:
784 if key in to_load:
~/.cache/pypoetry/virtualenvs/zask-vOGOH6lJ-py3.8/lib/python3.8/site-packages/sqlalchemy/sql/sqltypes.py in process(value)
1721 if value is None:
1722 return None
-> 1723 return loads(value)
1724
1725 else:
我想继续使用我的简单Postgres对象键/值存储,有人看到哪里出了问题吗
目前没有回答
相关问题 更多 >
编程相关推荐