2016-06-28 10 views
0

Alles, was ich tun möchte, ist eine einzelne Zeile einer SQL-Tabellenzeile zu drucken.Drucken Sie eine sqlalchemy Zeile

Sagen, ich habe:

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) 

Dann würde ich ausgeben möchte etwas, das wie folgt aussieht:

id: 1 
name: theRowName 

Bevorzugte ohne in den Tabellenspalten zu Festcode, das heißt im Allgemeinen.

Ich habe versucht:

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

Neben Gedanken über __str__ und __repr__ Umsetzung, aber es fehlt ihnen wieder der Allgemeinheit Anfrage.

Es gibt viele Fragen zum Abdecken einer Tabellenzeile in JSON, aber das ist nicht wirklich was ich will, ich sorge mich mehr um die visuelle Ausgabe - es muss nicht danach maschinenlesbar sein.

+0

Fügen Sie dem Modell die Methoden "__str__" und "__repr__" hinzu, wenn Sie die Darstellungen ändern möchten. –

+0

Aktualisiert in Bezug auf '__str__' und' __repr__' – DBCerigo

Antwort

0

Um klar zu sein - Sie wollen eine allgemeine Methode, "col: value" zu drucken, ohne die Spaltennamen hart zu codieren? Ich SQLAlchemy nicht viel nutzen, sondern eine __str__ Methode wie folgt funktionieren sollte:

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

Anschließend können Sie diese Methode in einer Klasse mixin setzen an anderer Stelle in Ihren Modellen zu verwenden.

+0

Schön, danke! Am Ende habe ich einen benutzerdefinierten "Drucker" gemacht, der etwas Ähnliches macht, allerdings nicht so elegant wie deines, also werde ich deinen Code in meinem "Drucker" verwenden. Ich denke, ich hätte besser verstehen sollen, dass ich schon viele verschiedene und wechselnde Modelle hatte und wirklich nur einen ganz bestimmten Ort, an dem ich die Zeilen ausdrucken wollte. Es war also weniger Aufwand, die Klasse außerhalb der Klasse zu definieren, als alle Klassen meiner Modelle zu ändern. Danke noch einmal. – DBCerigo