2016-06-28 6 views
0

私がしたいのは、sqlalchemyテーブル行の1行を印刷することだけです。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でカバーすることには多くの質問がありますが、これは実際に私が望むものではありません。視覚的な出力については気になります。後でマシンで読む必要はありません。

+0

表現を変更したい場合は、モデルに '__str__'と' __repr__'メソッドをそれぞれ追加してください。 –

+0

'__str__'と' __repr__'に関して更新されました – DBCerigo

答えて

0

明確にするには、列名をハードコードしないで "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 

は、次に、あなたのモデル内の他の場所で使用するためにミックスインクラスでそのメソッドを置くことができます。

+0

ニース、ありがとう!私は自分の「プリンタ」であなたのコードを使用するので、あなたのようにエレガントではありませんが、同様のことを行うカスタムの「プリンタ」を作成しました。私は、すでにたくさんの異なったモデルや変化しているモデルがあったことを明確にすべきだったと思います。だから、私のモデルのすべてのクラスを変更するよりも、クラスの外側でそれを特定する努力は少なかったです。再度、感謝します。 – DBCerigo