这是一个棘手的问题。
我有几个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"
]
]
}
很奇怪吧?有谁曾经历过这个吗?如果是的话,*你是如何解决它的?
答案 0 :(得分:0)
仍未得到答复。嗯,这是一个图书馆的事情。 strace并没有像我想要的那样帮助(虽然不是专家)但是在分割完整个过程之后,SQLAlchemy检索到的不同发行版是不一样的;在得出ORM是罪魁祸首的假设之前,我必须检查泡菜,烧瓶和redis。 不知道那些主要区别,在任何情况下最简单的解决方案是在将数据推送到jsonify之前映射整个结果集。这不好,因为它吃了更多的资源,但至少它可以防止混乱。 它工作正常:Debian最新(不稳定),Ubuntu 14.10。 没有工作:Lubuntu 14.10,Debian stable,Centos 7
就是这样。不再深入研究这个问题了。