コンテンツにスキップ

データベースからデータを読み込む

次のメソッドを使用すると、データベースからデータをロードできます。

  • get(*args,**kwargs)->モデル

  • get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

  • first(*args, **kwargs) -> Model

  • all(*args, **kwargs) -> List[Optional[Model]]

  • iterate(*args, **kwargs) -> AsyncGenerator[Model]

  • モデル

    • Model. load()メソッド
    • クエリセットエージェント

    • QuerysetProxy.get(*args, **kwargs) 方法

    • QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) 方法
    • QuerysetProxy.first(*args, **kwargs) 方法
    • QuerysetProxy.all(*args, **kwargs) 方法

得る

get(*args,**kwargs)->モデル

kwargsの設定条件を満たす最初の行をデータベースから取得します。

条件が設定されていない場合、pk列でソートされたデータベースの最後の行が返されます。

条件を渡すことは、実際には以下で説明するfilter(*args,**kwargs)メソッドを呼び出すことです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Track(ormar. Model):
    ormar_config=ormar. OrmarConfig
        データベース=データベース、
        metadata=メタデータ,
        tablename="track"
    )

    id: int=ormar.Integer(プライマリキー=True)
    アルバム:オプション[Album]=ormar. ForeignKey(Album)
    name: str=ormar.String(max_length=100)
    位置: int=ormar.Integer()


track=await Track. object.get(name='The Bird')
上記はawait Track. object.filter(name='The Bird').get()と同等であることに注意してください。
track 2=track=await Track. object.get()
track==track 2
#この例ではDBの唯一の行なので、真です。
#引数なしで取得すると、最初の行をpk列descで返します。

!!!警告条件を満たすローがない場合、NoMatch例外が発生します。

1
基準を満たす複数の行がある場合、`MultipleMatches` 例外が発生します。

取得またはなし

get_or_none(*args, **kwargs) -> Model

上記のgetとまったく同じですが、条件に一致するデータベースレコードが見つからない場合は例外をスローする代わりにNoneを返します。

取得または作成

get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

メソッドの作成と取得の組み合わせです。

条件を満たすローを取得しようとすると、NoMatch例外が発生した場合、指定されたkwargsと_defaaultを使用して新しいローが作成されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Album(ormar. Model):
    or_config=base_or_config. copy(tablename="アルバム")

    id: int=ormar.Integer(プライマリキー=True)
    name: str=ormar.String(max_length=100)
    year: int=ormar.Integer()


アルバム、作成=await Album. object.get_or_create(name='The Cat',_default={"year": 1999})
assert作成はTrue
アサートalbum.name=="猫"
assertアルバム.年==1999
#オブジェクトは存在しないため作成されます
Album 2、作成=await Album. object.get_or_create(name='The Cat')
assert作成はFalse
アルバムをアサートする==アルバム2
#return同じdb行が返されるとTrue

!!!は、データベース内の同等の行であるにもかかわらず、上記の例のアルバムとアルバム2は2つの異なるPythonオブジェクトであると警告しています。これらのいずれかを更新しても、データベースから新しいデータを明示的に読み込むまで、2番目のオブジェクトは更新されません。

新しいオブジェクトを作成する場合は、pk列の値を渡すか、pk列を自動増分に設定する必要があることに注意してください

最初の

first(*args, **kwargs) -> Model

プライマリキー列の昇順でソートされた最初のローをデータベースから取得します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Album(ormar. Model):
    or_config=base_or_config. copy(tablename="アルバム")

    id: int=ormar.Integer(プライマリキー=True)
    name: str=ormar.String(max_length=100)


await Album. object.create(name='The Cat')
await Album. object.create(name='The Dog')
アルバム=await Album. object.first()
#プライマリキー列ascによる最初の行
assertalbum.name=='The Cat'

全部

all(*args, **kwargs) -> List[Optional["Model"]]

設定されたフィルターオプションの場合、特定のモデルのデータベース内のすべてのローが返されます。

kwargsの渡しは、filter(*args,**kwargs). all()の呼び出しに相当するショートカットです。

条件を満たすローがない場合は、空のリストを返します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Album(ormar. Model):
    or_config=base_or_config. copy(tablename="アルバム")

    id: int=ormar.Integer(プライマリキー=True)
    name: str=ormar.String(max_length=100)


class Track(ormar. Model):
    or_config=base_or_config. copy(tablename="track")

    id: int=ormar.Integer(プライマリキー=True)
    アルバム:オプション[Album]=ormar. ForeignKey(Album)
    title: str=ormar.String(max_length=100)
    位置: int=ormar.Integer()


tracks=awaitトラック.オブジェクト.セレクト_関連("アルバム"). all(アルバム__タイトル='サンプル')
#アルバムサンプルのすべてのトラックのリストを返します。
#参加の詳細については、参加とサブクエリのセクションを参照してください。

tracks=await Track. object.all()
#データベース内のすべてのトラックのリストを返します。

反復

iterate(*args, **kwargs) -> AsyncGenerator["Model"]

特定のモデルのデータベース内のすべてのローの非同期反復可能なジェネレータを返します。

argsおよび/またはkwargsを渡すことは、filter(*args, **kwargs).iterate() を呼び出すことに等しいショートカットです。

条件を満たすローがない場合は、空の非同期ジェネレータを返します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
class Album(ormar. Model):
    or_config=base_or_config. copy(tablename="アルバム")

    id: int=ormar.Integer(プライマリキー=True)
    name: str=ormar.String(max_length=100)


await Album. object.create(name='The Cat')
await Album. object.create(name='The Dog')
#ジェネレーターから一度に1つのメインモデルを生成するすべてのアルバムモデルを非同期的に反復します。
Album. object.iterate()内のアルバムの非同期:
    印刷(album.name)

#猫
#犬

!!!iterate()を使用すると、2つの最適化を組み合わせても意味がないため、以前のprefetch_ated()呼び出しが無視されることを警告します。

1
もし `iterate()` & `prefetch_related()` 一緒に使用されます `QueryDefinitionError` 例外が発生します。

モデルメソッド

各モデルインスタンスには、それ自体を保存、更新、または読み込むための一連のメソッドがあります。

ロード

load()メソッドを呼び出すことで、ForeignKey関連のモデルを読み込むことができます。

load()は、他のプロセスによって変更された場合、データベースからモデルを更新するために使用できます。

!!!ヒントモデルメソッドのload()メソッドの詳細を読む

QuerysetProxyメソッド

関連するManyTomanyフィールドとReverseForeignKeyに直接アクセスする場合は、関連するモデルのリストを返します。

ただし、QuerySet APIのサブセットを公開しているため、親モデルから直接フィルタリング、作成、関連モデルの選択などを行うことができます。

得る

動作原理は上記のget関数と全く同じですが、関係の反対側から関連オブジェクトを取得することができます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

取得またはなし

上記のgetとまったく同じですが、条件に一致するデータベースレコードが見つからない場合は例外をスローする代わりにNoneを返します。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

取得または作成

上記のget_or_create関数とまったく同じですが、リレーションシップの反対側から関連するオブジェクトをクエリしたり、作成したりすることができます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

最初の

上記の最初の関数とまったく同じですが、関係の反対側から関連するオブジェクトをクエリできるようにします。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください

全部

上記のすべての機能とまったく同じですが、関係の反対側から関連するオブジェクトをクエリできます。

!!!ヒントQuerysetProxyの詳細については、querysetproxyセクションにアクセスしてください