Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将sqlalchemy记录对象存储到memcache中_Python_Serialization_Sqlalchemy_Memcached - Fatal编程技术网

Python 如何将sqlalchemy记录对象存储到memcache中

Python 如何将sqlalchemy记录对象存储到memcache中,python,serialization,sqlalchemy,memcached,Python,Serialization,Sqlalchemy,Memcached,代码: 我正在尝试将sqlalchemy记录对象存储到memcache中 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker DBSession = sessionmaker() DBSession.bind = engine session = DBSession() engine

代码:

我正在尝试将sqlalchemy记录对象存储到memcache中

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DBSession = sessionmaker()
DBSession.bind = engine
session = DBSession()
engine = create_engine('mysql://root:password@localhost/db', echo=True)
Base = declarative_base(engine)

class Accounts(Base):
    __tablename__ = 'accounts'
    __table_args__ = {'autoload': True}
它正在存储字符串对象而不是用户对象
输出:
'

有什么帮助吗


感谢advance

问题不在于如何存储
SQLAlchemy
对象,而在于如何存储任何对象实例

这是从您导入的pymemcache
客户端
类的

值必须具有str()方法才能将其自身转换为字节 绳子


您还没有包含查询数据库时使用的
Users
类的定义,因此我只能假设您没有重写
\uuuu str
。因此,当
pymemcache
试图将对象转换为字节字符串时,它调用python的默认
\uuu str\uuu
实现并存储该实现。

正如@SuperShoot在其回答中提到的那样,
pymemcache
希望存储
str
表示。由于SQLAlchemy模型实例(记录)在本机上不是
str
表示形式,
pymemcache
尝试调用其默认的
\uuu str\uuu()
方法,从而产生不希望的结果

您需要的是一个临时步骤,将SQLAlchemy模型实例序列化为一个结构或另一个结构的
str
。这使您的逻辑循环可折叠流动:

  • 将模型实例序列化为一种或另一种结构的
    str
  • 使用
    pymemcache
    存储序列化的
    str
  • pymemcache
    检索
    str
    时,将其反序列化到SQLAlchemy模型实例中,以便在Python代码中继续轻松使用它
  • 对于SQLAlchemy模型,这可能有点复杂,这就是为什么我建议使用该库(完全公开:我是作者)。它允许您将SQLAlchemy模型序列化为CSV、JSON或YAML,然后可以将其持久化到memcache。它还允许您轻松地将CSV、JSON或YAML字符串反序列化到SQLAlchemy模型实例中,从而轻松地维护上述整个流程

    您可以在“文档”页面上了解该库的更多功能:

    需要记住的重要一点是,在使用SQLAthanor时,您需要决定要以何种格式存储数据(我建议使用JSON或YAML),然后显式配置要序列化为该格式的列/属性(这是库中的一项安全功能)。因为您的代码片段显示您正在使用声明性反射,所以您可能需要查看文档的以下部分以了解如何配置SQLAthanor:


    希望这有帮助

    你能发布更多的代码吗,特别是你从memcache中检索和打印用户对象的部分?你现在能检查一下吗?仍然看不到你在哪里打印用户对象。
    from pymemcache.client.base import Client
    client = Client(('localhost', 11211))
    client.set('testkey', session.query(Users).get(1))