[PYTHON] Eine Geschichte, die das Debuggen von Modellen in der Django + SQLAlchemy-Umgebung einfacher macht

Hintergrund

Python und Django Ich bin im ersten Monat. Die Schienengeschichte beträgt ca. 2 Jahre. Warum ist Pythons Debug so schwer zu sehen? Besonders Modell. Die folgende Anzeige. Wer würde davon profitieren?

>>> class Foo(object):
        pass
>>>
>>> repr(Foo())
'<__main__.Foo object at 0x02A74E50>'

Suchen Sie im Netz nach dem Meer, um festzustellen, ob es einen anderen Weg gibt, und verwenden Sie repr, um es wunderschön zu sehen! Hurra! Das befreit dich vom Schmerz!

def __repr__(self):
    return '<Stats: description={0.description!r}, mystat={0.mystat!r}>'.format(self)

... was ist das nervig.

Sie müssen an jede Klasse schreiben. Ist es möglich, eine One-Shot-Bibliothek oder etwas hinzuzufügen? ?? Ich denke.

dort gab es.

Referenz: http://stackoverflow.com/a/15929677/5114776

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

if __debug__:
    # monkey-patch in useful repr() for all objects, but only in dev
    def tablerepr(self):
        return "<{}({})>".format(
            self.__class__.__name__,
            ', '.join(
                ["{}={}".format(k, repr(self.__dict__[k]))
                    for k in sorted(self.__dict__.keys())
                    if k[0] != '_']
            )
        )
    Base.__repr__ = tablerepr
>>> session.query(FooBar).get(1)
<FooBar(id=1, foo='bar', comments='foobar', hoge=1231242342341342342, fuga=datetime(2015, 5, 5, 5, 5, 5), tiger='waearsdtdygfyfguiohjohjohpp'>

Es ist jedoch immer noch schwierig, mit dieser Referenz allein zu sehen. Ich bin keine Maschine! Ein Format, das für die Leute leicht zu sehen ist! Sonst ist es bedeutungslos!

Einfacher zu sehen

Base = declarative_base()

if __debug__:
    # monkey-patch in useful repr() for all objects, but only in dev
    def tab_char(max_length, target_lenght):
        tab = []
        tab_char_count = 4
        tab_count = (max_length/tab_char_count - target_lenght/tab_char_count) + 1
        for i in range(tab_count):
            tab.append('\t')
        return "".join(tab)


    def table_repr(self):
        max_length = max(map(lambda n: len(n), self.__dict__.keys()))
        return "\n<{}({})>".format(
            self.__class__.__name__,
            ', '.join(
                ["\n\t{}{}= {}".format(k, tab_char(max_length, len(k)), repr(self.__dict__[k]))
                 for k in sorted(self.__dict__.keys())
                 if k[0] != '_']
            )
        )

    Base.__repr__ = table_repr
>>> session.query(FooBar).get(1)
<FooBar(
	id					= 1
	fooooooooo			= 'bar',
	comments			= 'foobar',
	hoge				= 1231242342341342342, 
	fuga				= datetime(2015, 5, 5, 5, 5, 5), 
	tiger				= 'waearsdtdygfyfguiohjohjohpp'>

Perfekt.

Recommended Posts

Eine Geschichte, die das Debuggen von Modellen in der Django + SQLAlchemy-Umgebung einfacher macht
Fileinput, ein Modul, das das Schreiben von Perl-ähnlichen Filterprogrammen in Python erleichtert
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Eine Geschichte, die Qiita unbedingt in einer Proxy-Umgebung sehen wollte
Ich habe versucht, eine Site zu erstellen, mit der die aktualisierten Informationen von Azure einfach angezeigt werden können
Deep Learning macht es dramatisch einfacher, den Zeitraffer körperlicher Veränderungen zu erkennen
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Die Geschichte von PHP, die in der Entwicklungsumgebung in Ordnung war, in der Produktionsumgebung jedoch fehlerhaft LEVEL1 ~ 3 + 1
Sie, die das Protokoll ausmalen, um es besser sehen zu können
Ein Liner, der JSON formatiert, um die Anzeige zu vereinfachen
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
So erstellen Sie einen Datensatz, indem Sie eine Beziehung zum geerbten Modell in das von Django geerbte Modell einfügen
Erstellen Sie eine Webseite, auf der ein Modell ausgeführt wird, das die Auflösung des Bilds mithilfe von Gradio erhöht, wodurch das Erstellen eines Webbildschirms vereinfacht wird
Ich habe eine Klasse geschrieben, die das Schreiben erleichtert, indem ich die Teiltexte spezifiziere, wenn ich Mecab mit Python verwende
Eine Geschichte, die nicht funktioniert hat, als ich versucht habe, mich mit dem Python-Anforderungsmodul anzumelden
So geben Sie die im Django-Modell enthaltenen Daten im JSON-Format zurück und ordnen sie der Broschüre zu
Beachten Sie, dass Sie die im Django-Vorlagenformular übergebenen Parameter Element für Element manuell dekorieren möchten
Eine Geschichte über das Erstellen eines Programms, mit dem die Anzahl der Instagram-Follower in einer Woche von 0 auf 700 erhöht wird
Es wurde eine Funktion hinzugefügt, um gewünschte Verschiebungen in der Django-Verschiebungstabelle zu registrieren
Installieren Sie Django in einer virtuellen Pipenv-Umgebung
Die Geschichte eines virtuellen Planetariums [bis es einem Anfänger gelingt, ein Modell mit einem Skript zu erstellen]
Django ~ Lass es uns im Browser anzeigen ~
Die Geschichte der Erstellung von Botonyan, das den Inhalt von Google Text & Tabellen als Antwort auf ein bestimmtes Keyword in Slack zurückgibt
Als ich in IPython versuchte, den Wert zu sehen, war es ein Generator, also kam ich auf ihn, als ich frustriert war.
Ich dachte, es wäre langsam, die for-Anweisung in NumPy zu verwenden, aber das war nicht der Fall.
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Die Geschichte der Erstellung einer Webanwendung, die umfangreiche Lesungen mit Django aufzeichnet
Erstellen Sie ein Django-Projekt und eine Django-Anwendung in einer virtuellen Python-Umgebung und starten Sie den Server
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Das erste, was überprüft werden muss, wenn in Django ein No Reverse Match auftritt
[Django] Erstellen Sie ein Formular, das automatisch die Adresse aus der Postleitzahl ausfüllt
Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen
Definieren Sie den Teilungswert in Django und spiegeln Sie ihn einfach auf dem Bildschirm wider
Anweisungen zum Verbinden von Google Colab mit der lokalen Laufzeit in einer Windows-Umgebung
django geodjango Ich habe mich darauf bezogen, als ich im Tutorial feststeckte (Bearbeitung)
Erklären, wie LINE BOT auf einfachste Weise der Welt erstellt werden kann (2) [Vorbereiten der Bot-Anwendung in einer lokalen Umgebung mit Django of Python]
Ein Modell, das die Gitarre mit fast.ai identifiziert
Verwenden Sie den neuesten Pip in einer virtuellen Umgebung
Starten Sie Django in einer virtuellen Umgebung mit Pipenv
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Legen Sie eine feste IP in der Linux-Umgebung fest
Die Geschichte der Anzeige von Mediendateien in Django
So erstellen Sie eine Rest-API in Django
Die Geschichte, die zur Installation von Pip passt
Es ist eine Huckepack-Geschichte über den Dienst, der "Nyan" zurückgibt, wenn Sie Ping drücken
Der Hintergrund der Zeichen im Textbild ist überbelichtet, um das Lesen zu erleichtern.
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
Eine Geschichte, die vorbereitet werden musste, wenn versucht wurde, ein Django-Tutorial mit einfachen Centos7 zu erstellen
Beachten Sie, dass ich süchtig nach dem npm-Skript war, das in der Überprüfungsumgebung nicht übergeben wurde
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken (② Registrieren Sie die Umgebung im Fitnessstudio).
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war