资讯专栏INFORMATION COLUMN

轻松将sqlAlchemy中的对象转换为dict

Ververica / 2548人阅读

摘要:在用写应用的时候,经常会用进行通信,跟最接近的对象就是,有时候操作也会比操作对象更为方便,毕竟不用管数据库的状态了。

在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操作ORM对象更为方便,毕竟不用管数据库session的状态了。

假设数据库里有一张post表,其中一种方法就是

p = session.query(Post).first()
p.__dict__

但由于p是sqlAlchemy的对象,所以p.__dict__中会有一些其他的属性比如_sa_instance这种我们不需要关注的

那么我们可以给model的基类加一个方法,假设models.py中原来是这样

Base = sqlalchemy.ext.declarative.declarative_base()

class Post(Base):
    __tablename__ = "post"
    id = Column(Integer, primary_key=True)
    title = Column(String)

那么我们可以加一个to_dict()方法到Base类中

def to_dict(self):
    return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

Base.to_dict = to_dict

这样就可以

p = session.query(Post).first()
p.to_dict()

当然,如果model没有和table绑定的话model里是没有__table__的信息的,可能也会出问题,不过我目前觉得这样最方便了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37544.html

相关文章

  • SQLAlchemy系列之一

    整理了下以前学习SQLAlchemy的一些笔记,准备弄成一个系列来写,顺便巩固下自己的知识,好了,废话不多说了,让我们开始学习SQLAlchemy吧 在学SQLAlchemy之前,我们需要了解一个叫ORM的东西, ORM,全称(Object Relational Mapping),中文称之为对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用写原生的SQL语句,通过把表映射成类,把行作...

    Caizhenhao 评论0 收藏0
  • Python “黑魔法” 之 Meta Classes

    摘要:幸而,提供了造物主的接口这便是,或者称为元类。接下来我们将通过一个栗子感受的黑魔法,不过在此之前,我们要先了解一个语法糖。此外,在一些小型的库中,也有元类的身影。 首发于 我的博客 转载请注明出处 接触过 Django 的同学都应该十分熟悉它的 ORM 系统。对于 python 新手而言,这是一项几乎可以被称作黑科技的特性:只要你在models.py中随便定义一个Model的子类,Dj...

    LeoHsiun 评论0 收藏0
  • Lunar, 一个Python网络框架的实现

    摘要:核心的几个组件模板引擎,框架,请求和应答的处理还是有一些难度,但是经过一步步的分析和编码还是能够完成功能。模板引擎模板引擎是另外一个比较大和的模块。 前前后后,大概两个月的时间,lunar这个项目终于达到了一个很高的完整度。 Lunar是一个Python语言的网络框架,类似于Django,Flask,Tornado等当下流行的web framework。最初有这个想法是在大二下学期,...

    邱勇 评论0 收藏0
  • 21、 Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料注意数据保存的操作都是在文件里操作的将数据保存为文件是一个信号检测导入图片下载器模块定义数据处理类,必须继承初始化时打开文件为数据处理函数,接收一个,里就是爬虫最后来的数据对象文章标题是 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 注意:数据保存的操作都是在p...

    Alex 评论0 收藏0
  • Essential SQLAlchemy2th学习笔记之ORM模块

    摘要:你应该使用工厂类来创建类,因为这确保了配置参数的正确性。对象包含创建数据库连接所需的一切信息,它不会立即创建连接对象,而是会在我们进行具体操作时创建。注意生产环境不要使用这个选项。关于选择的最佳实践使用迭代方式获取所有值,而不是。 定义模式Defining Schema 定义ORM类的4个步骤: 继承declarative_base()函数返回的类 定义__tablename__属性...

    JasonZhang 评论0 收藏0

发表评论

0条评论

Ververica

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<