sqlalchemy ORM 方式获取的 session.query 进行历遍?问题 2,比较 dict 和 session.query 是否相同的方法?

2020-06-01 00:00:40 +08:00
 qazwsxkevin

e 文不好,也尽力去看了官文,这两个问题感觉似乎是,我直接看官文不一定有答案的解决,存在技巧?

    DataELE = {'A':'AA','B':'BB','markID':'46628'}

    # 查询
    DataQuery = session.query(tbl_Data).filter(tbl_Data.markID == DataELE.get('markID')).first()

是否可对 DataQuery 内容进行历遍,表结构虽然已经 class tbl_Data 了,
SQL 表结构简单还好,如果有几十个字段,
去对 tbl_Data.*** N 个字段表达做处理,把字段名字敲写完全和完全正确,还是挺郁闷的。。。
能历遍一梭子就好。。。

第二个问题与上面的问题情景有些不同,但现在我是这么做的,感觉不是很好的样子。。。
把 DataQuery 转了字典(网上看到的例子)

    DataELE = {'A':'AA','B':'BB','markID':'46628','UpdateTime':xxxx}

    # 查询
    DataQuery = session.query(tbl_Data).filter(tbl_Data.markID == DataELE.get('markID')).first()

    def to_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}
     
     DataQueryDict = to_dict(DataQuery) # 转换字典
     DataQueryDict.pop('id') # 剥掉 SQL 自增 ID
     DataQueryDict.pop('UpdateTime') # 剥掉更新时间
     # 比较内容
     if set(DataQueryDict.items()) ^ set(DataELE.items()): # 有不同
            writeToLogString = writeToLogString  + (str(set(DataQueryDict.items()) ^ set(DataELE.items()))) # 找出不同的地方,后面会把 writeToLogString 保存起来
    

想找个方法,能否直接比较本地 dict 和 query 结果,又忽略.querry 带来的自增 id,和 updatetime 。。。。
目的是:本地生成了一个 dict,这个 dict 结构看看跟查询结果是否有不同,有不同的地方作为 String 进行 print 。。。。

1421 次点击
所在节点    Python
1 条回复
Latin
2020-06-01 10:08:27 +08:00
with_entities 查询你要的字段就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/677317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX