📣
TiDB Cloud Essential はパブリックプレビュー中です。このページは自動翻訳されたものです。原文はこちらからご覧ください。

表の操作



TiDBは、関連するデータのコレクションを整理して保存するためにテーブルを使用します。柔軟なスキーマ定義機能を備えているため、特定の要件に合わせてテーブルを設計できます。

テーブルには、異なるデータ型の複数の列を含めることができます。サポートされているデータ型には、テキスト、数値、ベクター、バイナリデータ( BLOB )、JSONなどがあります。

このドキュメントでは、 pytidbを使用してテーブルを操作する方法を説明します。

pytidbは、開発者が AI アプリケーションを効率的に構築できるように設計されています。

注記:

完全な動作例については、リポジトリの基本的な例参照してください。

テーブルを作成する

TableModelの使用

pytidb 、テーブルのスキーマを表すTableModelクラスを提供します。このクラスはピダンティックモデルと互換性があり、宣言的にテーブルを定義できます。

次の例では、次の列を持つitemsという名前のテーブルを作成します。

  • id : 整数型の主キー列
  • content : テキスト型の列
  • embedding : 3次元のベクトル型列
  • meta : JSON型の列

    データベースに接続するを使用してpytidbインスタンスを取得したら、 clientメソッドをcreate_tableしてテーブルを作成できます。

    from pytidb.schema import TableModel, Field, VectorField from pytidb.datatype import TEXT, JSON class Item(TableModel): __tablename__ = "items" id: int = Field(primary_key=True) content: str = Field(sa_type=TEXT) embedding: list[float] = VectorField(dimensions=3) meta: dict = Field(sa_type=JSON, default_factory=dict) table = client.create_table(schema=Item, if_exists="overwrite")

    create_tableメソッドは次のパラメータを受け入れます。

    • schema : テーブル構造を定義するTableModelのクラス。
    • if_exists : テーブル作成モード。
      • raise (デフォルト): テーブルが存在しない場合は作成し、既に存在する場合はエラーを発生させます。
      • skip : テーブルが存在しない場合は作成し、既に存在する場合は何も行いません。
      • overwrite : 既存のテーブルを削除し、新しいテーブルを作成します。これはテストや開発には便利ですが、本番環境では推奨されません。

    テーブルが作成されると、 tableオブジェクトを使用してデータの挿入、更新、削除、クエリを実行できます。

    CREATE TABLEステートメントを使用してテーブルを作成します。

    CREATE TABLE items ( id INT PRIMARY KEY, content TEXT, embedding VECTOR(3), meta JSON );

    テーブルにデータを追加する

    TableModelを使用

    TableModelインスタンスを使用して行を表し、それをテーブルに挿入できます。

    単一のレコードを挿入するには:

      table.insert()メソッドを使用して、テーブルに 1 つのレコードを挿入します。

      table.insert( Item( id=1, content="TiDB is a distributed SQL database", embedding=[0.1, 0.2, 0.3], meta={"category": "database"}, ) )

      INSERT INTOステートメントを使用して、テーブルに 1 つのレコードを挿入します。

      INSERT INTO items(id, content, embedding, meta) VALUES (1, 'TiDB is a distributed SQL database', '[0.1, 0.2, 0.3]', '{"category": "database"}');

      複数のレコードを挿入するには:

        table.bulk_insert()メソッドを使用して、テーブルに複数のレコードを挿入します。

        table.bulk_insert([ Item( id=2, content="GPT-4 is a large language model", embedding=[0.4, 0.5, 0.6], meta={"category": "llm"}, ), Item( id=3, content="LlamaIndex is a Python library for building AI-powered applications", embedding=[0.7, 0.8, 0.9], meta={"category": "rag"}, ), ])

        INSERT INTOステートメントを使用して、複数のレコードをテーブルに挿入します。

        INSERT INTO items(id, content, embedding, meta) VALUES (2, 'GPT-4 is a large language model', '[0.4, 0.5, 0.6]', '{"category": "llm"}'), (3, 'LlamaIndex is a Python library for building AI-powered applications', '[0.7, 0.8, 0.9]', '{"category": "rag"}');

        ディクト付き

        dict使って行を表し、それをテーブルに挿入することもできます。この方法はより柔軟で、データを挿入するためにTableModel使用する必要がありません。

        単一のレコードを挿入するには:

          辞書と共にtable.insert()メソッドを使用して、テーブルに 1 つのレコードを挿入します。

          table.insert({ "id": 1, "content": "TiDB is a distributed SQL database", "embedding": [0.1, 0.2, 0.3], "meta": {"category": "database"}, })

          INSERT INTOステートメントを使用して、テーブルに 1 つのレコードを挿入します。

          INSERT INTO items(id, content, embedding, meta) VALUES (1, 'TiDB is a distributed SQL database', '[0.1, 0.2, 0.3]', '{"category": "database"}');

          データをテーブルに保存する

          saveメソッドは、単一の行を挿入または更新する便利な方法を提供します。行の場合、主キーがテーブルに存在しない場合、このメソッドは新しい行としてテーブルに挿入します。レコードが既に存在する場合、このメソッドは行全体を上書きします。

          注記:

          テーブル内にレコードIDが既に存在する場合、 table.save()​​レコード全体を上書きします。レコードの一部のみを変更するには、 table.update()使用します。

            table.save()メソッドを使用して、単一のレコードをテーブルに保存します。

            例: 新しいレコードを保存する

            saved_record = table.save( Item( id=4, content="Vector databases enable AI applications", embedding=[1.0, 1.1, 1.2], meta={"category": "vector-db"}, ) )

            例: 既存のレコードを保存する (レコード全体を上書きする)

            # This overwrites the entire record with id=1 updated_record = table.save( Item( id=1, # Existing ID content="Updated content for TiDB", embedding=[0.2, 0.3, 0.4], meta={"category": "updated"}, ) )

            レコードを保存するには、 INSERT ... ON DUPLICATE KEY UPDATEステートメントを使用します。

            例: 新しいレコードを保存するか、存在する場合は更新する

            INSERT INTO items(id, content, embedding, meta) VALUES (4, 'Vector databases enable AI applications', '[1.0, 1.1, 1.2]', '{"category": "vector-db"}') ON DUPLICATE KEY UPDATE content = VALUES(content), embedding = VALUES(embedding), meta = VALUES(meta);

            テーブルからデータをクエリする

            テーブルからレコードを取得するには:

              テーブルからレコードを取得するには、 table.query()メソッドを使用します。

              例: 最初の10件のレコードを取得する

              result = table.query(limit=10).to_list()

              SELECTステートメントを使用して、テーブルからレコードを取得します。

              例: 最初の10件のレコードを取得する

              SELECT * FROM items LIMIT 10;

              クエリ条件に基づいてレコードを取得するには:

                filtersパラメータをtable.query()メソッドに渡します。

                result = table.query( filters={"meta.category": "database"}, limit=10 ).to_list()

                レコードをフィルタリングするには、 WHERE句を使用します。

                例: カテゴリ「データベース」のレコードを10件取得する

                SELECT * FROM items WHERE meta->>'$.category' = 'database' LIMIT 10;

                サポートされているフィルター操作と例の完全なリストについては、ガイドフィルタリングを参照してください。

                テーブル内のデータを更新する

                  table.update()メソッドを使用して、レコードをフィルターで更新します。

                  例: idが1のレコードを更新する

                  table.update( values={ "content": "TiDB Cloud Starter is a fully managed, auto-scaling cloud database service", "embedding": [0.1, 0.2, 0.4], "meta": {"category": "dbaas"}, }, filters={ "id": 1 }, )

                  UPDATEステートメントを使用して、レコードをフィルターで更新します。

                  例: idが1のレコードを更新する

                  UPDATE items SET content = 'TiDB Cloud Starter is a fully managed, auto-scaling cloud database service', embedding = '[0.1, 0.2, 0.4]', meta = '{"category": "dbaas"}' WHERE id = 1;

                  テーブルから削除する

                    フィルターのレコードを削除するには、 table.delete()メソッドを使用します。

                    例: id 2のレコードを削除する

                    table.delete( filters={ "id": 2 } )

                    DELETEステートメントを使用して、 フィルターのレコードを削除します。

                    例: id 2のレコードを削除する

                    DELETE FROM items WHERE id = 2;

                    テーブルを切り捨てる

                      テーブルからすべてのデータを削除しながらテーブル構造を維持するには、 table.truncate()メソッドを使用します。

                      table.truncate()

                      テーブルが切り捨てられていることを確認するには、テーブルに 0 行が含まれていることを確認します。

                      table.rows()

                      テーブルからすべてのデータを削除しながらテーブル構造を維持するには、 TRUNCATE TABLEステートメントを使用します。

                      TRUNCATE TABLE items;

                      テーブルが切り捨てられていることを確認するには、テーブルに 0 行が含まれていることを確認します。

                      SELECT COUNT(*) FROM items;

                      テーブルを削除する

                        データベースからテーブルを完全に削除するには、 client.drop_table()メソッドを使用します。

                        client.drop_table("items")

                        テーブルがデータベースから削除されたことを確認するには:

                        client.table_names()

                        データベースからテーブルを完全に削除するには、 DROP TABLEステートメントを使用します。

                        DROP TABLE items;

                        テーブルがデータベースから削除されたことを確認するには:

                        SHOW TABLES;

                        このページは役に立ちましたか?