3. 履歴データの管理 - DataSource オブジェクト

DataSource は、ローカルの履歴データ ストレージとのインターフェイスを担当します。ファイルベースのストレージ (csv/hdf/feather など) またはデータベースベースのストレージ (MySQL/MariaDB など) を管理でき、統合されたテーブル スキーマと読み取りインターフェイスを上位層に公開します。データのダウンロードと更新は通常、DataSource によって自動的にプルされるのではなく、qt.refill_data_source() を介して実行されます。

class qteasy.DataSource(source_type: str = 'file', file_type: str = 'csv', file_loc: str = 'data/', host: str = 'localhost', port: int = 3306, user: Optional[str] = None, password: Optional[str] = None, db_name: str = 'qt_db', allow_drop_table: bool = False)[ソース]

ローカルの履歴データ ストレージ (ファイルまたはデータベース) を管理するための統合されたエントリ ポイント オブジェクト。

DataSource は、ローカル ファイルまたはデータベースと対話し、履歴データ テーブルの読み取り、書き込み、および概要を集中管理し、生成されたデータ構造が HistoryPanel および上位層 API によって正しく利用できるようにする責任を負います。一部のテーブルが欠落している場合、DataSource 自体はデータを自動的にダウンロードしません。代わりに、refill_data_source などの関数と連携してメンテナンスを実行します。サポートされているファイル タイプ、データベース タイプ、その他の初期化の詳細については、ドキュメントの関連セクション「DataSource とローカル データ ソース」を参照してください。

サンプル

以下の例は、DataSource クラス名 (安定した出力) を示しています。実際に使用する場合は、ローカル データ ディレクトリまたはデータベース接続パラメータと組み合わせる必要があります。

>>> import qteasy as qt
>>> qt.DataSource.__name__
'DataSource'
property all_basic_tables: list

すべてのベース データ テーブルのリストを取得する

property all_data_tables: list

すべての履歴データテーブルのリストを取得します(調整テーブルを除く)

property all_sys_tables: list

すべてのシステム データ テーブルのリストを取得する

property all_tables: list

すべてのデータテーブルのリストを取得する

property allow_drop_table: bool

データテーブルの削除が許可されているかどうかを取得します

db_run_in_transaction(action: Callable[[...], Any], *args, **kwargs) Any[ソース]

DataSource で最小限のトランザクション ラッパーを実行します (実際の DB トランザクション。ファイル ストレージには何も操作しません)。

パラメータ:
  • action (Callable[..., Any]) -- トランザクション内で実行するために呼び出し可能

  • *args -- action に渡される位置引数

  • **kwargs -- action に渡されるキーワード引数

戻り値:

``action``の戻り値

戻り値の型:

Any

delete_sys_table_data(table: str, record_ids: (<class 'list'>, <class 'tuple'>)) int[ソース]

システム データ テーブルから特定のレコードを削除します。削除するレコードの ID をリストまたはタプルとして渡します

パラメータ:
  • table (str) -- データを削除する必要があるテーブルの名前

  • record_ids (list of int or tuple of int) -- 削除するレコードのIDのリスト

戻り値:

削除されたレコードの数

戻り値の型:

int

drop_empty_tables() int[ソース]

データソースからすべての空のテーブル、つまり行が 0 のテーブルを削除します。

戻り値:

削除されたテーブルの数

戻り値の型:

int

drop_table_data(table)[ソース]

ローカルに保存されたデータ テーブルを削除します (この操作は元に戻すことができないため、慎重に使用してください)。データ ソースでallow_drop_tableがFalseに設定されている場合、データ テーブルを削除できず、エラーが発生します。

パラメータ:

table (str,) -- ローカルデータテーブルの名前

戻り値の型:

None

例外:

RuntimeError -- データ ソースのallow_drop_tableがFalseに設定されている場合、テーブルを削除できず、エラーが発生します。

export_table_data(table, file_name=None, file_path=None, shares=None, start=None, end=None)[ソース]

データテーブルからデータを読み取った後、それをファイルにエクスポートすると、ユーザーが少量のデータを転送したり、使用中にデータを表示したりするのに便利です。

この機能を使用する場合、ユーザーはデータソースの種類を意識する必要はありません。テーブル名とフィルター条件を指定するだけです。エクスポートされたデータは CSV ファイルとして保存されます。ユーザーはファイル名と保存パスを自分で指定できます。ファイル名が指定されていない場合は、テーブル名がデフォルトのファイル名として使用されます。ストレージ パスが指定されていない場合は、現在の作業ディレクトリがデフォルトのストレージ パスとして使用されます。

パラメータ:
  • table (str) -- テーブル名

  • file_name (str, optional) -- エクスポートされたファイル名。指定しない場合、デフォルトでテーブル名がファイル名として使用されます。

  • file_path (str, optional) -- エクスポートされたファイルのストレージ パス。指定しない場合、デフォルトで現在の作業ディレクトリがファイルの保存パスとして使用されます。

  • shares (list of str, optional) -- ts_code フィルター条件。空の場合、すべてのレコードが返されます

  • start (DateTime like, optional) -- YYYYMMDD 形式の日付。空の場合、フィルタリングは適用されません

  • end (Datetime like,optional) -- YYYYMMDD 形式の日付。 start が空でない場合に有効です。日付範囲をフィルタリングするために使用されます。

戻り値:

file_path_name -- エクスポートされたファイルのフルパス

戻り値の型:

str

get_all_basic_table_data(refresh_cache=False, raise_error=True)[ソース]

すべての基本データテーブルを迅速に取得する機能。通常、キャッシュは高速化するために使用されます。 Refresh_cache が True に設定されている場合、キャッシュはクリアされ、データは再度ダウンロードされます。

パラメータ:
  • refresh_cache (Bool, Default False) -- True の場合、キャッシュをクリアしてデータを再ダウンロードします。

  • raise_error (Bool, Default True) -- True の場合、データ テーブルが空のときに ValueError が発生します。

戻り値の型:

DataFrame

get_data_table_size(table, human=True, string_form=True)[ソース]

データテーブルによって使用されているディスク容量を取得します。

パラメータ:
  • table (str) -- テーブル名

  • human (bool, default True) -- True の場合、1590868 ではなく 1.5MB など、読みやすい形式で表示されます。 Falseの場合、バイト数を返します。

  • string_form (bool, default True) -- True の場合、印刷を容易にするために結果を文字列として返します。

戻り値:

tuple (size, rows)

戻り値の型:

tuple of int or str:

get_sys_table_last_id(table)[ソース]

既存のテーブルから最後の ID を取得します

パラメータ:

table (str) -- テーブル名

戻り値:

last_id

戻り値の型:

int 当前使用的最后一个ID(自增ID)

get_table_data_coverage(table, column, min_max_only=False)[ソース]

ローカル データ テーブルのコンテンツのカバレッジ範囲を取得します。テーブルの「column」列から重複排除された値を取得して返します。

パラメータ:
  • table (str,) -- データテーブルの名前

  • column (str or list of str) -- 重複を排除して返す必要があるデータ列

  • min_max_only (bool, default False) -- True の場合、データ列全体を返す必要はありません。最大値と最小値のみを返します。最大値と最小値のみが返される場合、戻り値は 2 つの要素を含むリストになります。最初の要素は最小値、2 番目は最大値、3 番目は合計数です。

戻り値の型:

List, 代表数据覆盖范围的列表

サンプル

>>> import qteasy
>>> qteasy.QT_DATA_SOURCE.get_table_data_coverage('stock_daily', 'ts_code')
Out:
['000001.SZ',
 '000002.SZ',
 '000003.SZ',
 '000004.SZ',
 '000005.SZ',
 '000006.SZ',
 ...,
 '002407.SZ',
 '002408.SZ',
 '002409.SZ',
 '002410.SZ',
 '002411.SZ',
 ...]
>>> import qteasy as qt
>>> qt.QT_DATA_SOURCE.get_table_data_coverage('stock_daily', 'ts_code', min_max_only=True)
Out:
['000001.SZ', '873593.BJ']
get_table_info(table, verbose=True, print_info=True, human=True) dict[ソース]
テーブルに既にデータが含まれているかどうか、データ ボリューム、ディスク領域の使用状況、データ カバレッジ範囲など、テーブルに関する情報を取得して出力します。

データのダウンロード方法と

3. Parameters

table: str

テーブル名

verbose: bool, Default: True

より多くの情報を表示するかどうか。その場合は、テーブルのスキーマとその他の詳細を表示します。

print_info: bool, Default: True

すべての結果を印刷するかどうか。

human: bool, Default: True

読みやすい文字列表現を提供するかどうか。

Returns:
  • データテーブルに関する構造化情報を含む辞書:

  • { -- テーブル名: 1、str、テーブル名 table_exists: 2、bool、テーブルが存在するかどうか table_size: 3、int/str、テーブルによって使用されるディスク容量。 human が True の場合、読みやすい文字列 table_rows: 4、int/str、テーブル内の行数を返します。 human が True の場合、読みやすい文字列を返します Primary_key1: 5, str, 最初の主キーの名前 pk_count1: 6, int, 最初の主キーのレコード数 pk_min1: 7, obj, 主キー 1 の開始レコード pk_max1: 8, obj, 主キー 2 の終了レコード Primary_key2: 9, str, 2 番目の主キーの名前 pk_count2: 10, int, 2 番目の主キーのレコード数 pk_min2: 11、obj、主キー 2 の開始レコード pk_max2: 12、obj、主キー 2 の終了レコード

  • }

info()[ソース]

データベース オブジェクトに関するさまざまな重要な情報をフォーマットして出力します。

insert_sys_table_data(table: str, **data) int[ソース]

システム操作テーブルにデータを挿入します。

一度に 1 つのレコードを挿入します。データは辞書として提供されます。 ID は自動的に生成されるため、データ ID を指定する必要はありません。指定されたデータ フィールドが不完全な場合、例外が発生します。提供されたデータに使用できないフィールドが含まれている場合、例外が発生します。

パラメータ:
  • table (str) -- 更新するテーブルの名前

  • data (dict) -- 更新または挿入するデータ。データ内のキーはデータベース テーブル内のフィールドと一致する必要があります。それ以外の場合は、例外がスローされます。

戻り値:

record_id -- 更新するレコードの ID

戻り値の型:

int

例外:

KeyError -- 指定されたフィールドが不完全であるか、使用できないフィールドが含まれている場合:

none_sys_tables() list[ソース]

すべての非システムテーブルのリストを取得する

overview(tables=None, print_out=True, include_sys_tables=False) DataFrame[ソース]

すべてのデータテーブルの現在のデータステータスを表形式でリストします。

パラメータ:
  • tables (str or list of str, Default None) -- リストするデータテーブルを指定します。なしの場合は、すべてのデータ テーブルをリストします。

  • print_out (bool, Default True) -- テーブル概要を印刷するかどうか

  • include_sys_tables (bool, Default False) -- システムテーブルを含めるかどうか

戻り値の型:

pd.DataFrame, 包含所有数据表的数据状态

read_cached_table_data(table: str, *, shares: str = None, start: str = None, end: str = None, primary_key_in_index: bool = True) DataFrame[ソース]

データテーブルのデータをキャッシュして、読み取り時間を短縮します。この関数は、ローカル データ抽出を高速化するために使用されます。

ユーザーが DataType オブジェクトを使用して大量のデータを読み取る場合、通常は、同じパラメータを使用して同じテーブルからデータを繰り返しフェッチする必要があります。読み取り速度を向上させるために、テーブル データをメモリにキャッシュして読み取り時間を短縮できます。ただし、通常のテーブル操作では、テーブルをリアルタイムで更新する必要があるため、キャッシュは適していません。したがって、この関数は、データを読み取るときに使用する DataType オブジェクト専用です。

read_sys_table_data(table, **kwargs) DataFrame[ソース]

すべてのレコードの読み取りや、指定された条件に基づいたレコードの読み取りなど、システム操作テーブルからデータを読み取ります。

返されるデータ型は pd.DataFrame です。 kwargs が指定されている場合は、条件に従ってフィルタリングされたデータを返します。

パラメータ:
  • table (str) -- 読み取るデータテーブルの名前。

  • kwargs (dict) -- データをフィルタリングするための条件。フィルタ基準として使用される辞書が含まれます。例: {account_id = 123}。

戻り値:

返されるデータは DataFrame です。 kwargs が提供されている場合、返されるデータにはフィルターされたデータのみが含まれます。

戻り値の型:

pd.DataFrame

read_sys_table_record(table, *, record_id: int, **kwargs) dict[ソース]

システム操作テーブルからデータを読み取ります。指定された ID でデータを読み取り、辞書を返します。

この関数は read_sys_table_data() を呼び出してテーブル全体を読み取り、record_id 行のデータを返します。返された辞書にはすべてのフィールドの値が含まれます。キーはフィールド名、値はフィールド値です。

パラメータ:
  • table (str) -- 読み取るデータテーブルの名前。

  • record_id (int) -- 読み取るデータのID。

  • kwargs (dict) -- フィルター条件として使用される辞書を含むフィルター条件 (例: account_id = 123)

戻り値:

data -- テーブルのスキーマ情報とテーブル内のレコードを含む、読み取られたデータ。

戻り値の型:

dict

read_table_data(table, *, shares: Optional[Union[str, list]] = None, start: Optional[str] = None, end: Optional[str] = None, primary_key_in_index: bool = True) DataFrame[ソース]

ローカル テーブルからデータを読み取り、データ形式を変更せずに DataFrame を返します。 Primary_key は DataFrame インデックスとして使用されます。

テーブルを読み取るときはすべての列を読み取りますが、戻り値では開始と終了の間の ts_code と trade_date によってフィルターされます。

パラメータ:
  • table (str) -- テーブル名

  • shares (str or list of str,) -- ts_code フィルター条件: カンマ区切りの文字列。空の場合、すべてのレコードが返されます。

  • start (str,) -- YYYYMMDD 形式の日付。空の場合、フィルタリングは適用されません

  • end (str,) -- YYYYMMDD 形式の日付。 start が空でない場合に有効です。日付範囲をフィルタリングするために使用されます。

  • primary_key_in_index (bool, default True) -- 主キーを DataFrame インデックスとして設定するかどうか。 False の場合、主キーは通常の列として返され、DataFrame インデックスがデフォルトの整数インデックスになります。

戻り値の型:

pd.DataFrame 返回数据表中的数据

reconnect()[ソース]
タイムアウトなどの理由でデータベース接続が失われた場合は、データベースに ping を送信してステータスを確認します。

可能であればデータベースに再接続します。

戻り値:

  • True (接続成功)

  • False (接続失敗)

table_data_exists(table)[ソース]

テーブルが存在するかどうかを判断するロジック層関数

パラメータ:

table (数据表名称) --

戻り値:

bool

戻り値の型:

True if table exists, False otherwise

property tables: list

すでに作成されているすべてのテーブルのリスト

update_sys_table_data(table: str, record_id: int, **data) int[ソース]

システム操作テーブルのデータを更新します。指定された ID でデータを更新します。更新コンテンツは kwargs によって提供されます。

一度に更新できるレコードは 1 つだけです。データは辞書として提供されます。 1 つ以上のフィールドを更新できます。指定されたフィールドが存在しない場合、例外が発生します。 IDは更新できません。 ID は存在する必要があります。それ以外の場合は例外が発生します。

パラメータ:
  • table (str) -- 更新するテーブルの名前

  • record_id (int) -- 更新する必要があるデータのID

  • data (dict) -- 更新するデータ(更新するフィールドを含む)、例: account_id = 123

戻り値:

id -- 更新するレコードの ID

戻り値の型:

int

例外:
  • KeyError -- 指定された ID が存在しないか、None の場合:

  • KeyError -- 指定されたフィールドが存在しない場合:

update_table_data(table, df, merge_type='update') int[ソース]

入力 df を確認してください。要件を満たさない列または行を削除した後、次の手順を実行して、データをテーブルにマージします。

1,检查下载后的数据表的列名是否与数据表的定义相同,删除多余的列 2,如果datasource type是"db",删除下载数据中与本地数据重复的部分,仅保留新增数据 3,如果datasource type是"file",将下载的数据与本地数据合并并去重 返回处理完毕的dataFrame

パラメータ:
  • table (str,) -- テーブル名。データベースに定義されたテーブルである必要があります。

  • merge_type (str) --

    指定如何合并下载数据和本地数据: - 'update': 默认值,如果下载数据与本地数据重复,用下载数据替代本地数据;

    table_usage=='basics' 的表在重复主键上仅当下载字段非空时才覆盖该列(patch), 避免稀疏通道(如 AKShare)用空行业/日期等冲掉既有 Tushare 元数据

    • 'ignore' : 如果下载数据与本地数据重复,忽略重复部分

  • df (pd.DataFrame) -- DataFrame を渡してデータを取得します。データ ソース チャネルが「df」の場合、このパラメータを指定する必要があります。

戻り値の型:

int, 写入数据表中的数据的行数

write_table_data(df, table, on_duplicate='ignore')[ソース]

df 内のデータをローカル データ テーブル (ローカル ファイルまたはデータベース) に書き込みます。

ローカル データ テーブルが存在しない場合は、新しいテーブルを作成します。ローカル データ テーブルがすでに存在する場合は、df データをローカル テーブルに追加します。追加されるデータの主キーが既存データと同じ場合の処理​​方法はon_duplicateパラメータによって決定されます

パラメータ:
  • df (pd.DataFrame) -- 列名がローカル テーブル定義と一致している必要があるデータ テーブル。

  • table (str) -- ローカルテーブル名、

  • on_duplicate (str) -- 重複データの処理方法 (mode==db の場合のみ有効): -ignore: デフォルト;すべてのデータをデータベース テーブルの末尾に追加します -update: データをデータベース テーブルに書き込みます。重複した pk が見つかった場合は、テーブルの内容を変更します。

戻り値:

int

戻り値の型:

写入的数据条数

メモ

警告!!書き込まれたデータは検証されないため、この関数を使用してデータをローカル データベースに直接書き込まないでください。 update_table_data() を使用して、ローカル データベースにデータを更新または書き込みます。