Zum Inhalt

Übliche Parameter

Alle Feldtypen haben einen allgemeinen Satz von Parametern.

Primärschlüssel.

Primary_key: bool = False-> ist standardmäßig False.

Legen Sie die Primärschlüsselspalte in der Tabelle fest, und der Fremdschlüssel referenziert immer die pk des Modells.

Es wird nur in SQL verwendet.

Automatische Erhöhung

Automatisches Inkrement: bool = Primary_key und type == int-> True standardmäßig, andernfalls False, wenn die Spalte ein Primärschlüssel und vom Typ Integer ist.

Kann nur in Verbindung mit int/bigint-Feldern verwendet werden

Wenn das Feld eine automatische Erhöhung hat, wird es optional.

Wird in SQL und pydantic verwendet (ändern Sie das pk-Feld in ein optionales Feld für automatische Inkremente).

Kann leer sein.

Leer: bool = False-> Standardmäßig False für alle Felder außer für relationale Felder.

Sie wird automatisch zu True geändert, wenn der Benutzer eine der folgenden Optionen anbietet:

  • Geben Sie einen Standardwert oder eine Funktion an
  • Gibt einen server_default-Wert oder eine Funktion an
  • Setzen Sie automatische Inkremente im Feld Integercrimary_key

Gibt an, ob die Felder optional oder erforderlich sind, um mit sql und pydantic verwendet zu werden.

Standardmäßig wird es für pydantic und sqlalchemy verwendet, da dies die am häufigsten verwendeten Einstellungen sind:

  • nullable = False-gibt an, dass die Datenbanksäule nicht leer ist und dass das Feld in pydantic benötigt wird
  • nullable = true-Zeigt an, dass die Datenbank leer ist und das Feld in pydantic optional ist.

Wenn Sie unterschiedliche Einstellungen für pydantic und Ihre Datenbank festlegen möchten, lesen Sie weiter unten sql_nullable.

!!!Beachten Sie, dass standardmäßig auch alle Fremdschlüssel leer sein können, was bedeutet, dass keine zugehörigen Modelle erforderlich sind.

1
Wenn Sie die `ForeignKey`-Spalte auf `nullable=False` ändern, wird es benötigt.

Zitat von_nullable

sql \ _ nullable : bool = nullable - > Standardmäßig ein Wert von nullable (wie oben beschrieben) .

Gibt an , ob das Feld nicht leer ist oder nur in der Datenbank leer sein darf .

Verwenden Sie diese Einstellung nur bei nullable , wenn Sie in einem pydantischen Modell und in der Datenbank unterschiedliche Optionen festlegen möchten .

Die Beispielverwendung könnte darin bestehen , ein Feld in der Datenbank nicht leer zu lassen , es jedoch in pydantic (auch mit dem Wert server _ default) leer zu lassen , wodurch verhindert wird , dass das Feld auf Null aktualisiert wird (wie bei der Einstellung server _ default können Sie keinen leeren Wert einfügen , da der Standardwert verwendet wird) .

anerkannt

Der Standardwert : Any = None - > ist standardmäßig None .

Wenn keine anderen Werte übergeben werden , wird der Standardwert verwendet .

In SQL , das zum Zeitpunkt der Einfügung aufgerufen wird , wird es während der Definition des pydantischen Modells verwendet .

Wenn Sie die Option [ ] auswählen , wird die

Sie können statische Werte oder aufrufbar übergeben (Funktionen usw .)

Es wird sowohl in SQL als auch in Pydantik verwendet .

Beispiel Verwendung :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Der Unterschied zwischen Passing a Value und Callable Pointer

# Der Wert
name : str = ormar . String (max _ length = 200 , default = " Name ")

# Hinweis , dass , wenn Sie eine Funktion nennen , es ist kein Pointer zu nennen
Eine Definition wie diese wird die Funktion bei Start-up und Genehmigung aufrufen
Das Ergebnis der Funktion wird dem Default zugewiesen , so dass es für alle Instanzen ein konstanter Wert sein wird .
created _ date : datetime . datetime = ormar . DateTime (default = Dateizeit .datetime.datetime.now())

# Wenn Sie eine Callable Referenz (die Notiz , dass es keine Argumente haben kann) weitergeben wollen
Ormar wird diese Funktion für Sie auf jedem Modell nennen
created _ date : datetime . datetime = ormar . DateTime (default = Dateizeit)datetime.datetime.now)

Callable kann eine Funktion , ein Konstrukt , eine Klasse etc. sein

Der Server erkennt den Wert

server _ default : Any = None - > Voreingestellt ist None .

Wenn keine anderen Werte übergeben werden, wird der Standardwert verwendet.

In einem serverseitigen Aufruf von sql können Sie die ie sql-Funktion übergeben, z. B. now () oder die in der sqlalchemy text ()-Klausel verpackte Abfrage/Wert.

Wenn das Feld einen server_default-Wert hat, wird es optional.

Sie können statische Werte oder aufrufbare (Funktionen usw.) übergeben

Wird nur in SQL verwendet.

Beispiele verwenden:

 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 akzeptiert str,sqlalchemy.sql.elements.ClauseElement oder sqlalchemy.sql.elements.TextClause Wenn Sie also einen IE Ganzzahlwert setzen möchten, müssen Sie ihn in die Funktion sqlalchemy. text () packen, wie oben gezeigt.

!!!Sie können auch gültige SQL übergeben, die in sqlalchemy.text () enthalten ist (dialektspezifisch)

1
Zum Beispiel `func.now()` above could be exchanged for `text('(CURRENT_TIMESTAMP)')` for sqlite-backend

!!!info server_default übergibt direkt an die sqlalchemy-Tabellendefinition, so dass Sie mehr in der Standardsqlalchemy-Dokumentation des Servers lesen können.

Der Name

name: str = None-> Voreingestellt None

Erlaubt Ihnen, einen anderen Namen für den zu verwendenden Spaltennamen anzugeben.

Dies ist nützlich für vorhandene Datenbankstrukturen, die reservierte Schlüsselwörter verwenden, oder wenn Sie einen anderen Datenbanknamen als den ormar-Feldnamen verwenden möchten.

Nehmen wir als Beispiel den unten stehenden Code.

from, ein reserviertes Wort in Python, verhindert, dass Sie Modelle mit diesem Spaltennamen erstellen.

Das Ändern des Modellnamens in from_und das Hinzufügen des Parameters name ='from 'führt dazu, dass ormar from als Spaltenname der Datenbank verwendet.

1
2
 #... Rest of Model Cut für Brevity
 String (max_length = 15, name ='from ') ist ein

In ähnlicher Weise können Sie den Namen einer Fremdschlüsselspalte in der Datenbank ändern, während Sie die gewünschten Relationsnamen in ormar beibehalten:

1
2
 #... Rest of Model Cut für Brevity
Album: Optional [Album]= ormar. ForeignKey (Album, name ="album_id")[Bearbeiten | Quelltext bearbeiten]

Die Indikation

Index: bool = False-> Vorgabe False,

Indexierung der Tabelle zu erstellen.

Es wird nur in SQL verwendet.

Einzigartig.

true = bool = falsch

Einzig die Liste der Beschränkungen.

Wird nur in SQL verwendet.

Überschreiben von_pydantic_type

Standardmäßig verwendet ormar einen vordefinierten pydantischen Feldtyp, der auf die Modellerstellung angewendet wird (daher sind die Typansagen optional).

Wenn Sie möchten, können Sie einen eigenen Typ anwenden, der die integrierten Typen vollständig ersetzt. Daher ist es Ihre Verantwortung als Benutzer, einen Typ bereitzustellen, der im Kontext eines bestimmten ormar-Feldtyps gültig ist.

Warnung Beachten Sie, dass Sie standardmäßig die integrierten Parameter verwenden sollten, die an das zugrunde liegende pydantische Feld übergeben werden.

1
Sie können überprüfen, welche Argumente in Feldtypen Abschnitt oder in [pydantic](https://pydantic-docs.helpmanual.io/usage/schema/#field-customisation) Dokumente unterstützt werden.

!!!Die Gefahr, ein Pydantik-Feld des falschen Typs einzustellen, kann Ihr Modell beschädigen, sodass Sie es nur überschreiben, wenn Sie wissen, was Sie tun.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Da es einfach ist, die Funktionalität von Ormar zu brechen, ist das `overwrite_pydantic_type`-Argument in Bezug auf Felder nicht verfügbar!


Die Abbildung zeigt die Konfidenzintervalle für die Konfidenzintervalle: (
    Metathek = Metathek
    Datengrundlage = Datenbank
)


Beispiel: sample overwrites
class OverwriteTest (ormar. Modell):
    ormar_config = base_ormar_config. copy (tablename ="overwrites")

    id: int = ormar. Integer (primary_key = true)(nicht bekannt)
    my_int: str = ormar. Integer (overwrite_pydantic_type = PositiveInt)(Übersetzung)
    @ Jutta: -((
        overwrite_pydantic_type = Optional [Json [str, int]](Übersetzung)