Cet article est l'article du 0ème jour du "Django Advent Calendar 2019 --Qiita". (Arbitrairement) (je vais me mettre en colère) (je l'effacerai si je me fâche)
Au fait, quel type de bibliothèque DB Access utilise-t-il lorsque vous créez une application Web avec Python? Je pense que le plus populaire est Django ORM. Si vous utilisez Flask ou Pyramid, SQL Alchemy est votre choix. Les personnes travaillant dans le domaine de la science des données peuvent utiliser le DataFrame de Pandas. Mais la bibliothèque que je recommande le plus est "Orator" dans le titre. Il y a déjà quelques articles écrits sur Orator ici à Qiita.
Notez que j'ai touché "Orator" Enregistrer les données récupérées avec Scrapy vers RDB avec ORM
Orator est un constructeur ORM / requête qui a été très influencé par la syntaxe ORM de Laravel. Site officiel Le développement a été lancé par sdispater. Si vous êtes profondément accro à Python, vous le remarquerez peut-être. Récemment, il travaille sur le développement de la poésie. Tout simplement parce qu'elle a été fortement influencée par l'ORM de Laravel, la migration vous oblige à créer votre propre fichier de migration comme Laravel et Rails. Ici, Django se chargera de détecter automatiquement les changements dans la table et de créer un fichier de migration. Mais ce qui rend Orator si génial, c'est la facilité d'écriture des requêtes.
students = Student \
.select('id', 'name', 'email') \
.join('class', 'class.num', '=', 'students.class_num') \
.where('class.id', 3) \
.get()
Hey? Similaire à SQL et intuitif, non? Vous pouvez connecter autant de jointures et où que vous le souhaitez avec une chaîne de méthodes. Venez avec moi pour toute question complexe!
Alors, comment faites-vous cela dans Django? Je vais commencer le sujet principal à partir d'ici.
Basé sur la structure de répertoires créée par Django Official Tutorial, orator.py est dans la même hiérarchie que models.py. Créez un fichier appelé.
├── 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
Ensuite, dans orator.py, définissez les informations pour informer les informations de connexion à la base de données dans la bibliothèque orator. Vous pouvez entrer une valeur fixe ici, mais comme les informations de connexion à la base de données sont déjà définies dans settings.py, il est préférable de l'appeler à partir d'ici.
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)
Il existe trois types de «driver», «sqlite», «mysql» et «postgres». Remarque Typo car cela ne fonctionnera que si vous l'écrivez exactement de cette façon.
Extrayez le contenu de settings.py avec from django.conf import settings
. Après cela, vous pouvez obtenir la valeur souhaitée en suivant Dict.
La classe de modèle d'Orator, contrairement à Django et SQL Alchemy, n'est pas un schéma de table. Il définit simplement que "cette classe est liée à cette table".
À titre d'exemple, prenons les classes «Question» et «Choice» utilisées dans l'application de sondage du Tutoriel officiel Django. Définissons-le.
mysite/polls/orator.py
class Question(Model):
__table__ = 'polls_questions'
class Choice(Model):
__table__ = 'polls_choices'
Le nom de la table créé par Django est préfixé avec le nom de l'application, alors écrivons explicitement le nom de la table en gardant cela à l'esprit. Cependant, la façon dont je développe habituellement est d'éviter de préfixer le nom de l'application lors de la création d'une table dans Django.
mysite/polls/models.py
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
# db_Lorsque vous définissez une table, il devient le nom de la table qui est réellement créée.
db_table = 'questions'
mysite/polls/orator.py
class Question(Model):
__table__ = 'questions'
Que se passe-t-il si je réécris la partie de ce code accessible à la base de données dans Django Official Tutorial avec Orator? Ce sera comme suit.
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)
Pourquoi c'est facile! Bravo!
Incorporez Orator dans Django, partageons les rôles avec Orator pour la création / migration de table et le modèle Django pour l'émission de requêtes! Orator peut être d'une grande aide, en particulier dans le développement d'applications Web, où vous émettez souvent des requêtes complexes. Plus répandu!
Recommended Posts