Aller au contenu

Paramètres communs

Tous les types de champs ont un ensemble commun de paramètres.

clé primaire

Primary_key: bool = False -> est False par défaut.

Définit la colonne de clé primaire sur la table, la clé étrangère faisant toujours référence au pk du modèle.

Utilisé uniquement en sql.

Augmentation automatique

Incrémentation automatique: bool = Primary_key et type == int -> True par défaut si la colonne est une clé primaire et est de type Integer, False sinon.

Il ne peut être utilisé qu 'avec le champ int/bigint.

Si le champ a un incrément automatique, il devient facultatif.

Utilisé dans sql et pydantic (changer le champ pk en champ optionnel pour l'incrémentation automatique).

Peut être vide

NULL: bool = False -> False par défaut pour tous les champs sauf les champs de relation.

Il passe automatiquement à True si l'utilisateur fournit l'un des éléments suivants:

  • Fournir une valeur par défaut ou une fonction
  • La valeur ou la fonction server_default est fournie
  • Définir l'incrément automatique sur le champ Integerprimary_key

Spécifie si le champ est facultatif ou obligatoire, utilisé avec sql et pydantic.

Par défaut, pour pydantic et sqlalchemy, car ce sont les paramètres les plus courants:

  • nullable=False -indique que la colonne de base de données n'est pas vide et que le champ est requis dans pydantic
  • nullable=True -signifie que la base de données est répertoriée comme vide et que le champ est facultatif en pydantique

Si vous souhaitez définir des paramètres différents pour pydantic et la base de données, consultez sql_nullable ci-dessous.

!!!Notez que toutes les clés étrangères peuvent également être nulles par défaut, ce qui signifie qu 'aucun modèle de corrélation n'est nécessaire.

1
Si vous changez la colonne `ForeignKey` à `nullable=False`, cela devient obligatoire.

sql_nullable

sql_nullable: bool = nullable -> est la valeur nullable par défaut (comme décrit ci-dessus).

Spécifie si le champ n'est pas vide ou autorisé à être vide dans la base de données.

Utilisez ce paramètre avec nullable uniquement si vous souhaitez définir différentes options dans votre modèle pydantique et votre base de données.

Un exemple d'utilisation pourrait être de rendre un champ dans une base de données non vide, mais de permettre au champ d'être vide dans pydantic (même avec la valeur server_default). cela empêchera le champ d'être mis à jour à vide (comme avec le paramètre server_default, vous ne pouvez pas insérer une valeur vide car la valeur par défaut sera utilisée).

par default

Valeur par défaut: Any = None -> None par défaut.

Si aucune autre valeur n'est passée, la valeur par défaut est utilisée.

Dans le sql appelé à l'insertion, utilisé lors de la définition du modèle pydantique.

Si le champ a une valeur par défaut, il devient facultatif.

Vous pouvez passer des valeurs statiques ou appelables (fonctions, etc.)

Il est utilisé à la fois en sql et en pydantic.

Exemples d'utilisation:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# note la différence entre le passage d'une valeur et un pointeur appelable

#valeur
name: str = ormar.String(max_length=200, default="Name")

# note que lorsque vous appelez une fonction, ce n'est pas un pointeur à appeler
#une définition comme celle-ci appellera la fonction au démarrage et à l'assignation
#le résultat de la fonction au défaut, donc il sera considéré comme une valeur pour toutes les instances
created_date: datetime.datetime = ormar.DateTime(default= datetime.datetime.now ())

#Si vous voulez passer la référence appelable (note qu 'il ne peut pas avoir des arguments)
# note lack of the parenthesis -> ormar appellera cette fonction pour vous sur chaque modèle
created_date: datetime.datetime = ormar.DateTime(default= datetime.datetime.now)

# Callable peut être une fonction, une construction, une classe etc.

Serveur par défaut

server_default: Any = None -> est None par défaut.

Si aucune autre valeur n'est passée, la valeur par défaut est utilisée.

Dans le sql appelé côté serveur, vous pouvez donc passer une fonction ie sql (comme now() ou une requête/valeur enveloppée dans une clause sqlalchemy text()).

Si le champ a la valeur server_default, il devient facultatif.

Vous pouvez passer des valeurs statiques ou appelables (fonctions, etc.)

Utilisé uniquement dans SQL.

Exemples d'utilisation:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from datetime import datetime

import databases
import ormar
import sqlalchemy
from sqlalchemy import func, text

database = databases.Database("sqlite:///test.db")
metadata = sqlalchemy.MetaData()


class Product(ormar.Model):

    ormar_config = ormar.OrmarConfig(
        database=database, metadata=metadata, tablename="product"
    )

    id: int = ormar.Integer(primary_key=True)
    name: str = ormar.String(max_length=100)
    company: str = ormar.String(max_length=200, server_default="Acme")
    sort_order: int = ormar.Integer(server_default=text("10"))
    created: datetime = ormar.DateTime(server_default=func.now())

!!! warning server_default accepte str,sqlalchemy.sql.elements.ClauseElement ou sqlalchemy.sql.elements.TextClause, donc si vous voulez définir une valeur entière ie, vous devez l'envelopper dans la fonction sqlalchemy.text(), comme indiqué ci-dessus.

!!!Conseil Vous pouvez également passer un sql valide (spécifique au dialecte) contenu dans sqlalchemy.text()

1
Pour l'exemple `func.now()` au-dessus du niveau supérieur pourrait être modifié pour `text('(CURRENT_TIMESTAMP)')` pour sqlite backend

!!!info server_default est passé directement à la définition de la table sqlalchemy, vous pouvez donc en savoir plus dans la documentation par défaut de sqlalchemy du serveur.

Le nom

name: str = None -> None par défaut

Permet de spécifier l'alias de nom de colonne à utiliser.

Utile pour les structures de base de données existantes qui utilisent des mots-clés réservés, ou si vous souhaitez utiliser un nom de base de données différent du nom du champ ormar.

Prenez l'extrait de code suivant, par exemple.

from, en tant que mot réservé en python, vous empêche de créer un modèle avec ce nom de colonne.

Changer le nom du modèle en from_et ajouter l'argument name='from' entraînera l'utilisation de from par ormar comme nom de colonne de base de données.

1
2
 #... rester du modèle coupé pour la brièveté
 from_: str = ormar.String(max_length=15, name ="from")

De même, vous pouvez modifier le nom de la colonne de clé étrangère dans la base de données tout en conservant le nom de la relation souhaitée dans ormar:

1
2
 # ... rester du modèle coupé pour la brièveté
album: Optional[Album] = ormar.ForeignKey(Album, nom ="album_id")

Index des index

index: bool = False -> False par défaut,

Définit l'index des colonnes de la table.

Utilisé uniquement en sql.

Unique en son genre

Unique: bool = False

Définissez une contrainte unique pour les colonnes de la table

Utilisé uniquement en sql.

Remplacer_pydantic_type

Par défaut, ormar utilise un type de champ pydantique prédéfini, qui est appliqué à la création de modèle (l'indication de type est donc facultative).

Vous pouvez appliquer vos propres types si vous le souhaitez, ce qui remplacera complètement les types intégrés. il est donc de votre responsabilité en tant qu 'utilisateur de fournir des types qui fonctionnent dans le contexte d'un type de champ ormar donné.

Attention: par défaut, vous devez utiliser les paramètres intégrés passés au champ pydantique sous-jacent.

1
Vous pouvez vérifier quels arguments sont supportés dans les sections de types de champs ou dans [pydantic](https://pydantic-docs.helpmanual.io/usage/schema/#field-customisation) docs.

!!!Un champ pydantique de type incorrect de paramètres dangereux peut casser votre modèle, alors ne l'écrasez que si vous savez ce que vous faites.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Comme il est facile de rompre la fonctionnalité d'ormar, l'argument `overwrite_pydantic_type` n'est pas disponible sur les champs de relation!


base_ormar_config = ormar.OrmarConfig(
    Metadata= métadonnée
    database=database
)


# sample overwrites
Classe OverwriteTest(modèle ormar):
    ormar_config = base_ormar_config.copy(tablename="overwrites")

    id: int = ormar.Integer(primary_key=True)
    my_int: str = ormar.Integer(overwrite_pydantic_type=PositiveInt)
    constraint_dict: Json = ormar.JSON(
        overwrite_pydantic_type=Optional[Json[Dict[str, int]]])