2016-06-28 62 views
0

我想要做的是打印一行sqlalchemy錶行。打印一個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