【问题标题】:Print an sqlalchemy row打印一个 sqlalchemy 行
【发布时间】:2016-06-28 09:27:20
【问题描述】:

我想做的只是打印 sqlalchemy 表行的单行。

说我有:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class ATable(Base):
     __tablename__ = 'atable'  
     id = Column(Integer, primary_key=True) 
     name = Column(String(255), nullable=False)

然后我想输出任何看起来像这样的东西:

id: 1
name: theRowName

最好不必在表格列中硬编码,即更一般地。

我试过了:

 atable = Atable()
 ... #add some values etc.
 print atable
 print str(atable)
 print repr(atable)
 print atable.__table__.c

也考虑过实现__str____repr__,但它们再次缺乏通用性要求。

关于将表格行覆盖为 JSON 有很多问题,但这并不是我真正想要的,我更关心视觉输出 - 之后不需要机器可读。

【问题讨论】:

  • 如果您希望更改表示,请将 __str____repr__ 方法分别添加到您的模型中。
  • 更新至__str____repr__

标签: python sql postgresql sqlalchemy


【解决方案1】:

要明确 - 您想要一种通用方法来打印“col: value”而不对列名进行硬编码?我不怎么使用 SQLAlchemy,但是像这样的 __str__ 方法应该可以工作:

def __str__(self):
    output = ''
    for c in self.__table__.columns:
        output += '{}: {}\n'.format(c.name, getattr(self, c.name))
    return output

然后,您可以将该方法放入 mixin 类中,以便在模型的其他地方使用。

【讨论】:

  • 很好,谢谢!我最终制作了一个自定义的“打印机”,它做类似的事情,虽然不像你的那么优雅,所以我将在我的“打印机”中使用你的代码。我想我应该更清楚一点,我已经有很多不同的和不断变化的模型,实际上只有一个非常具体的地方我想打印这些行。因此,在课堂之外将其具体化比更改我所有模型的课程更容易。再次感谢。
猜你喜欢
  • 2016-10-16
  • 2011-08-03
  • 1970-01-01
  • 2021-01-30
  • 2020-06-30
  • 2018-02-18
  • 2013-04-30
相关资源
最近更新 更多