泡菜过渡中失去了元组? (SqlAlchemy - > Redis - > Pickle

时间:2014-12-03 04:23:58

标签: sqlalchemy pickle

这是一个棘手的问题。

我有几个VM(debian和lubuntu),两个框都运行相同的代码,我从mysql中提取一些数据并将其作为pickle对象提供。在这里一切都很好,问题是,当拉动这些信息并通过jsonify(烧瓶加入游戏)回应它时,这两个盒子之间的结果是不同的...我知道,不是代码问题......或者是它?其实我现在已经抓了好几个小时,可能在这个过程中失去了一些头发,无法弄清楚我做错了什么,我会责怪发行版的差异(两个版本的python版本是一样的,lubuntu有一个虽然更大的sqlalchemy版本)但我并不积极,因为我从两个响应中提取了一个值的密钥(更改了查询(...)。all for query.first()并添加了一个logger.debug(response.id) ))

可能会在这里回答一些不断上升的问题......我“腌制”了查询响应,将其存储在redis中,这样我就可以缓存该数据集,而不是经常点击数据库(不想提前提出这个主题以节省一些混淆) ,为什么我这样做是为了保持keyedtuple,而不是回到一个丑陋的字符串)

 # here happens the query
 try:
    connection = create_session(engine)
    vendor_ = Table('vendor',MetaData(engine),autoload=True)
    result  = pickle.dumps(connection.query(vendor_).all())
    connection.close()

在视图中,这是我提取信息的方式:

def all_vendor():
    response = pickle.loads(controls.vendor.all_vendor(True))
    return jsonify(vendors=response)

Debian框中的响应:

{
    "vendors":[
        {
            "id": 9, 
            "name": "TEST", 
            "contact": "TEST", 
            "phone": "888888", 
            "email": "test@mail.test"
        }
    ]
}

lubuntu的回复:

{
    "vendors": [
        [
            9, 
            "TEST", 
            "TEST", 
            "888888", 
            "test@mail.test"
        ]
    ]
}
很奇怪吧?有谁曾经历过这个吗?如果是的话,*你是如何解决它的?

1 个答案:

答案 0 :(得分:0)

仍未得到答复。嗯,这是一个图书馆的事情。 strace并没有像我想要的那样帮助(虽然不是专家)但是在分割完整个过程之后,SQLAlchemy检索到的不同发行版是不一样的;在得出ORM是罪魁祸首的假设之前,我必须检查泡菜,烧瓶和redis。 不知道那些主要区别,在任何情况下最简单的解决方案是在将数据推送到jsonify之前映射整个结果集。这不好,因为它吃了更多的资源,但至少它可以防止混乱。 它工作正常:Debian最新(不稳定),Ubuntu 14.10。 没有工作:Lubuntu 14.10,Debian stable,Centos 7

就是这样。不再深入研究这个问题了。