データの読み取りと書き込み

クエリーでデータを取得し、コンポーネントで使用することができます

クエリーを使用すると、コンポーネントで様々なソースからデータの読み取りや書き込みができます。Retoolでは、ほとんどのデータベースに対するクエリー、およびすべてのAPIに対するクエリーがサポートされています。

コンポーネントはプロパティを介してクエリーに結び付けられます。例えば、Tableのデータを{{query1.data}}になるように設定することで、テーブルにquery1からのデータを表示できます。同様に、{{resetPassword}}関数をトリガーするようにButtononClickを変更しAPIリクエストを実行できます。

概要

データを変更しないクエリー(例えば、読み取り専用のSQL文、またはGET APIリクエスト)は、ページのロード時に自動的に実行され.dataフィールドにデータが入力されます。このフィールドには、queryName.dataを介してアクセスできます。パラメーターが変更されると(例えば、select * from users where id = {{textinput1.value}})、読み取り専用クエリーが自動的に再実行されます。

データを変更するクエリーは、明示的に指示した場合のみ実行されます。例えば、usersのテーブルがあり、選択したユーザーのパスワードをリセットするPOSTリクエストがある場合、行を変更しても、そのPOSTクエリーは自動的には実行されません。このような場合は、POSTリクエストと他の書き込みリクエストを明示的に実行する必要があり、そのためには、一般的にはButtonを使用します。そうすることで、誤ってデータを書き戻すことがなくなります。

クエリーの実行とリフレッシュのタイミング

データを読み取るクエリー(SQL文、およびGET APIクエリー)は、パラメーターが変更されると自動的にリフレッシュされます。例えば、以下のクエリーは、textinput.valueが変更されるたびに自動的に更新されます。

select * from users where customer_id = {{textinput.value}}

🚧

データを書き込むクエリーは、パラメーターが変更されても自動的には実行されません

データを書き込むクエリー(GUIエディターによるSQLアクション、およびGET以外のその他すべてのHTTPメソッド)は、それらのパラメーターが変更されても自動的にはリフレッシュされません。それらが変更されるようにしたい場合は、クエリーの上部にあるドロップダウンで「Run query automatically when inputs change」を選択します。

しかし、必要になる可能性は低いでしょう。クエリーでTextInputから値を取得する場合には、TextInputへのキー入力のたびにそのクエリーが1回コールされるためです。それにより、データベースに、mmamarmaryの複数の行が挿入されることになります。POSTをトリガーするボタンを追加することをお勧めします。

その他のオプション

成功時または失敗時のクエリーのトリガー

多くの場合、1つのクエリーの終了後にさらにクエリーをトリガーする必要があります。例えば、データベース・テーブル内の何かを変更した後に、すべてのユーザーを取得するusersクエリーをリフレッシュする必要がある場合は、updateUsernameによってusersクエリーがリフレッシュされる必要があります。

そのためには、「queries to refresh」に追加するだけです。

`updateEmail`の成功後に`users`をリフレッシュします`updateEmail`の成功後に`users`をリフレッシュします

updateEmailの成功後にusersをリフレッシュします

実行前の確認要求

パラメーターが変更されたときや、クエリーをトリガーしたときに、クエリーを自動実行したくない場合は、実行前に確認を求めることができます。クエリーの実行前に、モーダル・ウィンドウがポップアップ表示され、本当にクエリーを実行するかどうかを尋ねるメッセージが示されます(メッセージは動的に変更される可能性があります)。

ユーザー削除クエリーの実行前に確認メッセージを表示ユーザー削除クエリーの実行前に確認メッセージを表示

ユーザー削除クエリーの実行前に確認メッセージを表示

クエリーの定期実行

Retoolでは、ユーザーが指定した期間にクエリーを定期実行するメカニズムが用意されています。以下に、この例を示します。

5秒(5000ミリ秒)ごとにクエリーをリフレッシュする例5秒(5000ミリ秒)ごとにクエリーをリフレッシュする例

5秒(5000ミリ秒)ごとにクエリーをリフレッシュする例

クエリーの動的な無効化

多数のクエリーがある複雑なページでは、すぐにクエリーが必要でない場合にクエリーの実行を停止すると便利な場合があります。例えば、タブ付きコンテナーを使用している場合に、ユーザーがアクティブなタブから2つ目のタブに切り替えたときにのみクエリーの実行が必要になることがあります。これを行うには、以下のように記述します。

2つ目のタブがアクティブになったときにのみクエリーを実行する2つ目のタブがアクティブになったときにのみクエリーを実行する

2つ目のタブがアクティブになったときにのみクエリーを実行する

監査ログにパラメーターが表示されないようにする

実行したすべてのクエリーは監査ログに記録されます。機密性の高いパラメーター(例えば、APIキー)がある場合は、記録しないようにする必要があります。そのために必要なのは、そのパラメーターを「drop from audit logs」ドロップダウンに追加することだけです。

`textinput1.value`の値をブラックリストに追加します`textinput1.value`の値をブラックリストに追加します

textinput1.valueの値をブラックリストに追加します

クエリーの頻度調整

Retoolのパフォーマンスが低速である場合は、クエリーのリフレッシュ頻度が多過ぎる可能性があります(例えば、キー入力のたび)。これを解決するには、実行頻度が少なくなるようにクエリーを調整します。デフォルトは750msです。

クエリーのタイムアウト

クエリーが無限に実行されることがないようにしたい場合は、クエリーのタイムアウトを設定できます。デフォルトのタイムアウトは10000msです。