Dieser Beitrag ist der Artikel zum 0. Tag von "Django Adventskalender 2019 - Qiita". (Willkürlich) (Ich werde wütend) (Ich werde es löschen, wenn ich wütend werde)
Welche Art von Bibliothek verwendet DB Access übrigens, wenn Sie eine Webanwendung mit Python erstellen? Ich denke, das beliebteste ist Django ORM. Wenn Sie Flask oder Pyramid verwenden, ist SQL Alchemy Ihre Wahl. Personen im Bereich Data Science verwenden möglicherweise den DataFrame von Pandas. Aber die Bibliothek, die ich am meisten empfehle, ist "Orator" im Titel. Es gibt bereits einige Artikel über Orator hier in Qiita.
Beachten Sie, dass ich "Orator" berührt habe Mit Scrapy gekratzte Daten mit ORM in RDB speichern
Orator ist ein ORM / Abfrage-Builder, der stark von der ORM-Syntax von Laravel beeinflusst wurde. Offizielle Website Es war Mr. Sdispater, der mit der Entwicklung begann. Wenn Sie stark von Python abhängig sind, werden Sie es vielleicht bemerken. Vor kurzem arbeitet er an der Entwicklung der Poesie. Nur weil es stark von Laravels ORM beeinflusst wurde, müssen Sie für die Migration eine eigene Migrationsdatei wie Laravel und Rails erstellen. Hier ist Django dafür verantwortlich, Änderungen in der Tabelle automatisch zu erkennen und eine Migrationsdatei zu erstellen. Das Tolle an Orator ist jedoch, dass Sie problemlos Anfragen schreiben können.
students = Student \
.select('id', 'name', 'email') \
.join('class', 'class.num', '=', 'students.class_num') \
.where('class.id', 3) \
.get()
Hallo? SQL-ähnlich und intuitiv, oder? Sie können beliebig viele Verknüpfungen mit einer Methodenkette verbinden und wo Sie möchten. Kommen Sie mit mir für jede komplexe Frage!
Wie bringt man das nach Django? Ich werde das Hauptthema von hier aus beginnen.
Basierend auf der von Django Official Tutorial erstellten Verzeichnisstruktur befindet sich orator.py in derselben Hierarchie wie models.py. Erstellen Sie eine Datei mit dem Namen.
├── mysite
│ ├── polls
│ │ ├── __init__.py
│ │ ├── admin.py
│ │ ├── apps.py
│ │ ├── migrations
│ │ │ └── __init__.py
│ │ ├── models.py
│ │ ├── orator.py ←←←←←←←NEW!!!
│ │ ├── tests.py
│ │ ├── urls.py
│ │ └── views.py
│ ├── manage.py
│ ├── mysite
│ │ ├── __init__.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ └── templates
Legen Sie als Nächstes in orator.py die Informationen fest, um die Verbindungsinformationen zur Datenbank in der Rednerbibliothek zu informieren. Sie können hier einen festen Wert eingeben. Da die Verbindungsinformationen zur Datenbank jedoch bereits in settings.py definiert sind, ist es besser, sie von hier aus aufzurufen.
mysite/polls/orator.py
import logging
from orator import DatabaseManager
from orator import Model
from django.conf import settings
config = {
'mysql': {
'driver': 'mysql',
'database': settings.DATABASES['default']['NAME'],
'host': settings.DATABASES['default']['HOST'],
'user': settings.DATABASES['default']['USER'],
'password': settings.DATABASES['default']['PASSWORD'],
'prefix': ''
'log_queries': True,
}
}
db = DatabaseManager(config)
Model.set_connection_resolver(db)
logger = logging.getLogger('orator.connection.queries')
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(
'It took %(elapsed_time)sms to execute the query %(query)s'
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
Es gibt drei Arten von "Treiber": "SQLite", "MySQL" und "Postgres". Hinweis Tippfehler, da er nur funktioniert, wenn Sie ihn genau so schreiben.
Ziehen Sie den Inhalt von settings.py mit from django.conf import settings
ab. Danach können Sie den gewünschten Wert erhalten, indem Sie Dict folgen.
Die Modellklasse von Orator ist im Gegensatz zu Django und SQL Alchemy kein Tabellenschema. Es definiert einfach, dass "diese Klasse an diese Tabelle gebunden ist".
Nehmen wir als Beispiel die Klassen "Frage" und "Auswahl", die in der Umfrage-App in Django Official Tutorial verwendet werden. Definieren wir es.
mysite/polls/orator.py
class Question(Model):
__table__ = 'polls_questions'
class Choice(Model):
__table__ = 'polls_choices'
Dem von Django erstellten Tabellennamen wird der Anwendungsname vorangestellt. Schreiben Sie daher den Tabellennamen explizit in diesem Sinne. Normalerweise entwickle ich jedoch, indem ich beim Erstellen einer Tabelle mit Django das Präfixieren des Anwendungsnamens vermeide.
mysite/polls/models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
# db_Wenn Sie eine Tabelle definieren, wird dies zum Namen der Tabelle, die tatsächlich erstellt wird.
db_table = 'questions'
mysite/polls/orator.py
class Question(Model):
__table__ = 'questions'
Was passiert, wenn ich den DB-Zugriff auf diesen Teil dieses Codes in Django Official Tutorial mit Orator neu schreibe? Es wird wie folgt sein.
mysite/polls/views.py
from django.shortcuts import render
- from .models import Question
+ from .orator import Question
def index(request):
- latest_question_list = Question.objects.order_by('-pub_date')[:5]
+ latest_question_list = Question.order_by('pub_date', 'asc').limit(5)
context = {'latest_question_list': latest_question_list}
return render(request, 'polls/index.html', context)
Warum einfach! Bravo!
Integrieren Sie Orator in Django und teilen Sie die Rollen mit Orator für die Tabellenerstellung / -migration und dem Django-Modell für die Ausgabe von Abfragen. Orator kann eine große Hilfe sein, insbesondere bei der Entwicklung von Web-Apps, bei denen Sie häufig komplexe Abfragen stellen. Weiter verbreitet!
Recommended Posts