コンテンツにスキップ

ドメイン

モデル間の関係を構築するために、12種類の基本的なモデルフィールドタイプと特別なForeignKeyおよびManyTomanyフィールドがあります。

!!!tip ForeignKeyとManyTomanyフィールドのチェック関係に関する説明。

各フィールドには、pydanticモデルを作成するために使用されるsqlalchemy列クラスとpythonタイプが割り当てられます。

フィールドタイプ

細いひも

String(max_length: int, min_length: int = None, regex: str = None,) 必要なmax_lengthパラメータがあります。

  • Sqlalchemy列: sqlalchemy.String
  • タイプ(pydantic用): str

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

テキスト

Text()には必須のパラメータがありません。

  • Sqlalchemy列: sqlalchemy.Text
  • タイプ(pydantic用): str

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

ブール値

Boolean()には必須のパラメータがありません。

  • Sqlalchemy列: sqlalchemy.Boolean
  • タイプ(pydantic用): bool

整数

Integer(minimum: int = None, maximum: int = None, multiple_of: int = None) 必須パラメーターはありません。

  • Sqlalchemy列: sqlalchemy.Integer
  • 型(pydantic用): int

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

大きな整数

BigInteger(minimum: int = None, maximum: int = None, multiple_of: int = None) 必須パラメーターはありません。

  • Sqlalchemy列: sqlalchemy.BigInteger
  • 型(pydantic用): int

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

小さい整数

SmallInteger(minimum: int = None, maximum: int = None, multiple_of: int = None) 必須パラメーターはありません。

  • Sqlalchemy列: sqlalchemy.SmallInteger
  • 型(pydantic用): int

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

浮かぶ

Float(minimum: float = None, maximum: float = None, multiple_of: int = None) 必須パラメーターはありません。

  • Sqlalchemy列: sqlalchemy.Float
  • タイプ(pydantic用): float

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

10進数

Decimal(minimum: float = None, maximum: float = None, multiple_of: int = None, precision: int = None, scale: int = None, max_digits: int = None, decimal_places: int = None) 必要なパラメーターはありません

長さと精度のパラメーター、またはmax_digitsとdecimal_placeを使用できます。

  • Sqlalchemy列: sqlalchemy.DECIMAL
  • タイプ(pydantic用): decimal.Decimal

!!!tip他のパラメータの説明については、pydanticドキュメントを参照してください。

日付

Date()には必須のパラメータがありません。

  • Sqlalchemy列:sqlalchemy.Date
  • タイプ(pydantic用):datetime.date

お時間に

Time(time zone: bool=False)必須のパラメータはありません。

タイムゾーンアウェアデータベースカラムにtime zone=Trueを渡すことができます。

  • Sqlalchemy列: sqlalchemy.Time
  • タイプ(pydantic用): date time.time

日付と時刻

DateTime(timezone: bool = False) 必須パラメーターはありません。

タイムゾーンアウェアデータベースカラムにtime zone=Trueを渡すことができます。

  • Sqlalchemy列: sqlalchemy.DateTime
  • タイプ(pydantic用): date time.date time

JSON

JSON()には必須のパラメータがありません。

  • Sqlalchemy列: sqlalchemy.JSON
  • タイプ(pydantic用): pydantic.Json

大きなバイナリファイル

LargeBinary(max_length)には必須のmax_lengthパラメータがあります。

  • Sqlalchemy列: sqlalchemy.LargeBinary
  • 型(pydantic用):バイト

LargeBinaryの長さは、一部のバックエンド(つまりmysql)ではフィールドのサイズを決定するために使用され、他のバックエンドでは単純に無視されますが、ormarでは常に必要です。ファイル/バイトの最大サイズ(バイト単位)である必要があります。

LargeBinaryにもオプションがあります。 represent_as_base64_str: bool = False フラグ。Trueormarに設定すると、バイト値は自動的にBase 64でデコードされた文字列に変換され、Base 64でエンコードされた文字列を渡すことで値を設定することもできます。

このように、値がutf-8と互換性がない場合でも、APIを介して値を設定できます。そうしないと、json変換中に失敗します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
base 64をインポート
。。。 #簡潔さのためにスキップされた他のインポート


base_ormar_config=ormar. OrmarConfig(ベースの設定
    メタデータ
    データベース
)


class LargeBinaryStr(ormar. Model):
    or_config=base_or_config. copy(tablename="my_str_blobs")

    id: int=ormar.Integer(プライマリキー=True)
    test_binary: str=ormar.LargeBinary(
        max_length=100000, expression_as_base 64_str=True
    )

#utf-8に準拠していない値を設定する-これはjsonのapi(つまりfastapi)で渡すことができることに注意してください。
item=LargeBinaryStr(test_binary=base 64. b 64 encode(b"\xc 3\x 28").decode())

assert item. test_binary==base 64.b 64 encode(b"\xc 3\x 28").decode()

基礎となる値はまだバイトであり、そのまま保存されることに注意してください。
assert item.__dict__["test_binary"]==b"\xc 3\x 28"

一般的な一意の識別子

UUID(uuid_format: str = 'hex') 必須パラメーターはありません。

  • Sqlalchemyカラム: sqlalchemy.CHAR(36)またはsqlalchemy.CHAR(32)フィールドに基づくormar.UUID(それぞれ文字列または16進形式)
  • タイプ(pydantic用): uuid.UUID

uuid_formatパラメータは、16進数(デフォルト)または文字列値を許可します。

フォーマットに応じて、データベースは32文字または36文字を使用します。

サンプル:

  • 「16進数」形式の値=c616ab438cce49dbbf4380d109251dce(文字(32))
  • 「文字列」値=c616ab43-8cce-49db-bf43-80d109251dce(文字(36))

読み込み時は常にpython UUIDになっているので、比較して2つのフォーマット値の値を比較することができます。

列挙する

ormar->で列挙を使用する方法は2つあります。1つはsqlalchemy. Enum列タイプの専用の列挙フィールドを使用する方法で、もう1つはormarの任意のフィールドに選択を設定する方法です。

Enumフィールドは、データベースの方言固有のEnumカラムタイプ(利用可能な場合)を使用しますが、このフィールドタイプが利用できない場合は、varcharにロールバックします。

選択オプションは、常に選択したデータベースフィールドタイプに従います。

したがって、どちらを使用するかは、使用するバックエンドと、列挙フィールドで使用する列/データの種類によって異なります。

列挙体-フィールド

Enum(enum_class=Type[Enum])には必須のenum_classパラメータがあります。

  • Sqlalchemy列: sqlalchemy.Enum
  • 型(pydantic用):型[Enum]