[PYTHON] J'ai touché "Orator" alors j'ai fait une note

Orator Présentation

La gamme écrite dans ce mémo

Détails du mémo

Paramètres de base de données

Spécifiez le répertoire et la base de données. Actuellement, trois bases de données sont prises en charge: PostgreSQL, MySQL et SQLite. Définissez le pilote, l'utilisateur (utilisateur de la base de données), le mot de passe (mot de passe de la base de données), la base de données (emplacement de la base de données), etc. Par exemple, dans le cas de SQLite, il peut être défini comme suit.

DATABASES = {                                                                   
   'development': {                                                            
        'driver': 'sqlite',  
        'database': '/tmp/authgate.sqlite'
    }
}

Créer une table

Vous pouvez créer une instance de DatabaseManager et accéder à la base de données avec cette instance. Transmettez la définition de base de données lors de la création d'une instance.

from orator import DatabaseManager

DATABASES = {                                                                   
   'development': {                                                            
        'driver': 'sqlite',  
        'database': '/tmp/authgate.sqlite'
    }
}
db = DatabaseManager(DATABASES)

Vous pouvez opérer sur DB avec Schema Builder. Créez une instance de schéma en transmettant une instance de DatabaseManager. Après cela, utilisez l'instance Schema pour appeler la méthode qui correspond à la colonne de la table que vous souhaitez définir.

create-database.py


from orator import DatabaseManager
from orator import Schema

DATABASES = {                                                                   
   'development': {                                                            
        'driver': 'sqlite',  
        'database': '/tmp/authgate.sqlite'
    }
}

db = DatabaseManager(DATABASES)
schema = Schema(db)

with schema.create('samples') as table:
    table.increments('id')
    table.string('string_column').nullable()
    table.integer('integer_column')

Lorsque le fichier ci-dessus créé est exécuté, un DB basé sur la définition est créé.

$ python create-database.py

Pour plus d'informations, consultez la section Générateur de schémas d'Orator. http://orator.readthedocs.org/en/latest/schema_builder.html)を参照。

Créer une classe qui sera un modèle

Syntaxe de base

Créez en héritant de la classe Model d'Orator. L'exemple suivant est une classe mappée à la table ** samples ** avec deux colonnes, ** string_column ** et ** integer_column ** créées précédemment.

class Sample(Model):                                                              
    __table__ = 'samples'                                                                                            
    __fillable__ = ['string_column'] 
    __guarded__ = ['integer_column'] 

__fillable__ et __guarded__

Utilisez correctement selon que l'affectation en masse est autorisée ou non. L'affectation en masse n'est pas autorisée pour les paramètres définis dans «guarded». Si vous ne souhaitez pas autoriser l'affectation en masse pour tous les attributs, vous pouvez écrire comme suit.

class AllBlockSample(Model):                                                              
    __table__ = 'samples'
    __guarded__ = ['*']

Pincez et mangez diverses autres propriétés

Dans Orator, il existe diverses propriétés représentées par «__ nom de propriété __». Parfois, cela peut être réalisé simplement en définissant les propriétés, il semble donc que vous serez heureux si vous le lisez. Voici un exemple de celui-ci.

** ・ Propriété __hidden__ **

Considérez le modèle suivant comme exemple.

class User(Model):
    __table__ = 'user'
    __fillable__ = ['login_id', 'password', 'name']
    __guarded__ = ['access_token']
    __hidden__ = ['password', 'access_token']

Orator fournit une méthode dédiée pour énumérer les propriétés d'une classe.

Ceux définis sur «hidden» ne sont pas affichés lors de l'utilisation de la méthode ci-dessus. Dans l'exemple de la classe User, seuls login_id et name sont affichés (id is ** PRIMARY KEY **). Bien sûr, les effets de __hidden__ ne s'appliquent pas aux standards Python __dict __ etvars ().

** ・ Propriété __timestamp__ **

Par défaut, Orator génère automatiquement une colonne qui enregistre l'heure de création de la table (** created_at ) et l'heure de mise à jour ( updated_at **). Si vous ne voulez pas générer automatiquement, ajoutez __timestamps__ = False.

class SampleModel(Model):
    __table__ = 'samples'
    __timestamps__ = False

Sauvegarde des données dans DB

Vous pouvez l'enregistrer avec save () ou create ().

sample_model = SampleModel()
sample_model.string_column = "test"
sample_model.integer_column = 100
sample_model.save()

sample_model = SampleModel.create(string_column='test')

Vous ne pouvez pas passer le paramètre __guarded__ à l'argument de création. Même s'il est passé, il sera ignoré et le paramètre correspondant restera None.

De plus, si __guarded__ = ['*'] est spécifié lors de la création de la classe Model, ʻorator.exceptions.orm.MassAssignmentError` se produira lors de l'appel de la méthode create.

Les différences subtiles entre save () et create () ne sont pas comprises en raison du manque de recherche.

À la fin

J'ai écrit une série de notes sur la méthode de réglage et la méthode de définition de classe. J'avais l'intention d'écrire sur «Migration» et «Émettre des requêtes de sélection / suppression / mise à jour», mais j'étais épuisé. À une autre occasion.

Recommended Posts

J'ai touché "Orator" alors j'ai fait une note
〇✕ J'ai fait un jeu
Je suis tombé sur l'utilisation de MoviePy, alors prenez note
J'ai fait un texte Python
J'ai fait un robot discord
J'ai touché PyAuto pendant un moment
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
J'ai créé un démon avec Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
Construction d'environnement Postgres avec Docker J'ai eu un peu de mal, alors notez
J'ai créé un nouveau compartiment AWS S3
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai fait un interlocuteur comme Siri
J'ai fait un script pour afficher des pictogrammes
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
J'ai créé un outil d'estampage automatique du navigateur.
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai fait une application WEB avec Django
J'ai fait un simulateur de neurones avec Python
J'ai fait une note du colaboratoire Google qui peut utiliser Spleeter facilement.
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
J'étais accro à essayer Cython avec PyCharm, alors prenez note
J'ai fait un robot de remplacement de tampon avec une ligne
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai touché graph-rcnn qui génère un graphe de scène
J'ai créé un outil utile pour Digital Ocean
J'ai touché HaikuFinder
J'ai touché Flask
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
J'ai fait un truc fou appelé tuple typé
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un outil de collecte de configuration de routeur Config Collecor
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai créé un Bot LINE avec Serverless Framework!
J'ai créé un outil pour compiler nativement Hy
Je ne pouvais pas m'échapper du futon, alors j'ai fabriqué une machine à éplucher les futons entièrement automatique.
J'ai créé un outil pour obtenir de nouveaux articles
Juste une note
J'ai fait un graphique de nombres aléatoires avec Numpy
Nous avons créé un produit de prévention du télétravail.
J'ai fait un simple lecteur RSS ~ Edition C ~
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)