5. Lokale Datenquelle – DataSource-Objekt
Die lokale Datenquelle ist der Kern der Datenverwaltungsfunktionalität von „qteasy“. Alle Daten müssen zunächst heruntergeladen und in der lokalen Datenquelle gespeichert werden, bevor sie von „qteasy“ verwendet werden können. „qteasy“ verwendet „DataSource“-Objekte, um die lokale Datenquelle zu verwalten. Die lokale Datenquelle ähnelt einer Datenbank und enthält eine Reihe vordefinierter Datentabellen. Die Klasse „DataSource“ stellt eine Reihe von APIs zum Verwalten der Daten in den Datentabellen bereit, einschließlich Lesen, Aktualisieren, Löschen und Abfragen von Daten.
Um ein neues „DataSource“-Objekt zu erstellen, können Sie den folgenden Befehl verwenden:
>>> import qteasy as qt
>>> ds = qt.DataSource()
Durch Drucken des Objekts „DataSource“ können Sie seine grundlegendsten Eigenschaften anzeigen:
>>> print(ds)
file://csv@qt_root/data/
Aus der gedruckten Zeichenfolge „file://csv@qt_root/data/“ von „DataSource“ können wir seine grundlegenden Eigenschaften erkennen.
Die gedruckten Ergebnisse enthalten grundlegende Informationen zum Datenquellenobjekt:
file:– Der Typ der Datenquelle. „qteasy“ unterstützt zwei Arten von Datenquellen: dateibasiert und datenbankbasiert. „Datei“ bedeutet, dass alle Datentabellen in der Datenquelle als Dateien auf der Festplatte gespeichert werden. Ebenso können Daten auch in einer „MySQL“-Datenbank gespeichert werden, wobei in diesem Fall der Datenquellentypcode „db“ lautet.csv:– Format zum Speichern von Datendateien. „qteasy“ kann Datendateien in verschiedenen Formaten auf der Festplatte speichern. Das einfachste Format ist „csv“, aber Benutzer können Daten auch als „hdf“- und „fth“-Dateien („Feather“) speichern, um unterschiedlichen Leistungspräferenzen gerecht zu werden.qt_root/data/:– Der Pfad zum Speichern von Datendateien. „qt_root“ stellt den Installations-Root-Pfad von „qteasy“ dar. Standardmäßig werden alle Datendateien im Unterverzeichnis „/data/“ im Stammverzeichnis gespeichert.
Ebenso können Sie ein Datenquellenobjekt mit dem Datenspeichertyp „Datenbank“ erstellen und dessen grundlegende Eigenschaften anzeigen. Wenn Sie jedoch eine Datenquelle vom Typ „Datenbank“ erstellen, müssen Sie den Hostnamen, den Benutzernamen, das Passwort und/oder den Datenbanknamen der MySQL-Datenbank angeben, zu der Sie eine Verbindung herstellen möchten.
>>> ds_db = qt.DataSource(source_type='database', host='localhost', user='您的用户名', password='您的密码', db_name='test_db')
>>> print(ds_db)
db:mysql://localhost@3306/test_db
Ebenso enthalten die gedruckten Ergebnisse grundlegende Informationen zur Datenquelle:
„db:mysql“ – Der Datenquellentyp ist eine MySQL-Datenbank; Alle Datentabellen werden in dieser Datenbank gespeichert.
localhost– der Hostname der Datenbank3306– Datenbankverbindungsporttest_db– Datenbankname. Wenn kein Name angegeben wird, ist die Standarddatenbank „qt_db“, diese Datenbank muss jedoch vorher erstellt werden.
Wenn verschiedene Datenquellenobjekte unterschiedliche Speichermethoden und Speicherpfade haben, haben sie keine Beziehung zueinander und beeinträchtigen die Daten des anderen nicht. Wenn jedoch zwei Datenquellen auf denselben Pfad verweisen und denselben Dateityp haben, speichern sie doppelte Daten.
Um weitere grundlegende Eigenschaften der Datenquelle anzuzeigen, können Sie auf mehrere Eigenschaften des Datenquellenobjekts zugreifen:
>>> print(ds.source_type) # 数据源的类型
file
>>> print(ds_db.source_type)
db
>>> print(ds.file_type, ds.file_path) # 数据源的文件类型和存储路径
csv /Users/jackie/Projects/qteasy/qteasy/data/
>>> print(ds.connection_type, ds_db.connection_type) # 数据源的连接类型
file://csv@qt_root/data/ db:mysql://localhost@3306/test_db
5.1. Standarddatenquelle
„qteasy“ verfügt über eine integrierte Standarddatenquelle, die keine manuelle Erstellung durch den Benutzer erfordert. Standardmäßig werden alle Daten in dieser Standarddatenquelle gespeichert und aus dieser gelesen. Benutzer können die Parameter dieser Datenquelle über die Konfigurationsdatei von „qteasy“ konfigurieren und so sicherstellen, dass die Datenquelle auf den richtigen Pfad verweist oder dass der richtige Benutzername für die Anmeldung bei der richtigen Datenbank verwendet wird. Die Eigenschaften der integrierten Standarddatenquelle können mit der folgenden Methode angezeigt werden:
>>> print(qt.QT_DATA_SOURCE)
db:mysql://www.qteasy.online@3306/ts_db
5.2. Datentabelle anzeigen
Nachdem Sie die grundlegenden Eigenschaften des Datenquellenobjekts verstanden haben, besteht der nächste Schritt darin, die in der Datenquelle gespeicherten Daten besser zu verstehen.
Die Datentabellen in der Datenquelle sind alle vordefiniert. Jede Datentabelle speichert einen anderen Datentyp. Diese Daten umfassen eine große Datenmenge, darunter Basisinformationen, K-Line-Daten, Leistungsberichte börsennotierter Unternehmen, makroökonomische Daten usw. für verschiedene Anlageprodukte wie Aktien, Indizes, Fonds, Futures und Optionen an den Aktien- und Terminmärkten von Shanghai und Shenzhen. Eine vollständige Liste der Datentabellen finden Sie im nächsten Kapitel. In diesem Abschnitt wird hauptsächlich erläutert, wie die grundlegenden Informationen und Daten verschiedener Datentabellen angezeigt werden.
Die Liste der Tabellen in einer Datenquelle kann über die Eigenschaft „all_tables“ der Datenquelle abgerufen werden, die ein Listenobjekt zurückgibt, das alle vordefinierten Tabellen in der Datenquelle enthält. Es muss jedoch unbedingt klargestellt werden, dass viele Tabellen zwar in der Datenquelle definiert sind, diese jedoch nur über grundlegende Definitionen verfügen: Headerinformationen, Feldnamen, Feldbedeutungen und Datentypen sind alle definiert. Neu erstellte Datenquellen verfügen normalerweise über leere Tabellen, die keine Daten enthalten. Um zu sehen, welche Tabellen in der Datenquelle bereits Daten enthalten, müssen Sie die Funktion „get_table_info()“ verwenden.
>>> print('All tables in datasource:', len(ds.all_tables))
All tables in datasource: 108
>>> print('Some tables:', ds.all_tables[5:15])
Some tables: ['hk_trade_calendar', 'us_trade_calendar', 'stock_basic', 'hk_stock_basic', 'us_stock_basic', 'stock_names', 'stock_company', 'stk_managers', 'new_share', 'money_flow']
Wie man sieht, sind in der aktuellen Version von „qteasy“ 108 Datentabellen vordefiniert, von denen einige Namen wie „stock_basic“ tragen.
Um Details einer bestimmten Tabelle in der aktuellen Datenquelle anzuzeigen, z. B. ihre Definition und ob sie Daten enthält, verwenden Sie die Methode „get_table_info()“.
>>> info = ds.get_table_info('stock_basic')
<stock_basic>--<股票基本信息>
852KB/5K records on disc
primary keys:
----------------------------------------
1: ts_code: <5396> entries
starts: 000001.SZ, end: 920128.BJ
columns of table:
------------------------------------
columns dtypes remarks
0 ts_code varchar(9) 证券代码
1 symbol varchar(6) 股票代码
2 name varchar(20) 股票名称
3 area varchar(10) 地域
4 industry varchar(10) 所属行业
5 fullname varchar(50) 股票全称
6 enname varchar(120) 英文全称
7 cnspell varchar(40) 拼音缩写
8 market varchar(6) 市场类型
9 exchange varchar(6) 交易所代码
10 curr_type varchar(6) 交易货币
11 list_status varchar(4) 上市状态
12 list_date date 上市日期
13 delist_date date 退市日期
14 is_hs varchar(2) 是否沪深港通
Zu den gedruckten Informationen gehören der Tabellenname, die Beschreibung, Felddefinitionen und Datentypen.
Beachten Sie, dass die aktuelle Größe der Tabelle angezeigt wird, wenn die Datentabelle bereits mit Daten gefüllt ist. Im obigen Beispiel werden einige wichtige Informationen im Folgenden erläutert:
„852 KB/5 KB Datensätze auf Datenträger“ – Dies bedeutet, dass die Tabelle etwa 852 KB Speicherplatz belegt und etwa 5.000 Datenzeilen enthält.
„Primärschlüssel“ – Zeigt die Primärschlüsselspalten der Daten an. Hier bedeutet es, dass die Spalte „ts_code“ der Primärschlüssel der Tabelle ist und diese Spalte etwa 5396 verschiedene Datensätze enthält. Wenn die Tabelle mehrere Primärschlüssel enthält, wird jede Primärschlüsselspalte separat aufgelistet, zusammen mit dem Datenbereich für dieses Feld. Im obigen Beispiel reicht der Datenbereich für die Spalte „ts_code“ beispielsweise von „000001.SZ“ bis „920128.BJ“, was uns mitteilt, dass die grundlegende Aktieninformationstabelle Informationen zu mehr als 5.000 Aktien mit Codes von 000001 bis 920128 enthält.
„Tabellenspalten“ – Hier werden die Felddefinitionen der Datentabelle angezeigt, die das „Schema“ der Tabelle darstellt. Es listet den Namen „columns“, den Datentyp „dtypes“ und beschreibende Informationen „remarks“ für jede Spalte auf.
Darüber hinaus gibt die Methode „get_table_info()“ ein „dict“ zurück, das auch Informationen über die Tabelle enthält. Diese Informationen können zum besseren Verständnis ausgedruckt und mit den oben beschriebenen formatierten Informationen verglichen werden.
>>> print(info)
{'table': 'stock_basic', 'table_exists': True, 'table_size': '852KB', 'table_rows': '5K', 'primary_key1': 'ts_code', 'pk_records1': 5396, 'pk_min1': '000001.SZ', 'pk_max1': '920128.BJ', 'primary_key2': None, 'pk_records2': None, 'pk_min2': None, 'pk_max2': None}
5.3. Gesamtinformationen zur Datenquelle anzeigen
Verwenden Sie die oben genannten Methoden, um jede Tabelle zu überprüfen. overview() fasst das gesamte DataSource zusammen:
>>> overview = ds.overview()
Analyzing local data source tables... depending on size of tables, it may take a few minutes
[########################################]104/104-100.0% A...zing completed!
Finished analyzing datasource:
file://csv@qt_root/data/
3 table(s) out of 104 contain local data as summary below, to view complete list, print returned DataFrame
===============================tables with local data===============================
Has_data Size_on_disk Record_count Record_start Record_end
table
trade_calendar True 1.8MB 70K CFFEX SZSE
stock_basic True 852KB 5K None None
stock_daily True 98.8MB 1.3M 20211112 20241231
Das Anzeigen der Gesamtinformationen der gesamten Datenquelle kann mehrere Minuten dauern, da hierfür alle Informationen aus jeder Datentabelle zusammengefasst werden müssen.
Während der Übersicht zeigt qteasy einen Fortschrittsbalken an, gibt dann einen „DataFrame“ aller Tabellen zurück und druckt wichtige Statistiken.
Die Zusammenfassung zeigt drei gefüllte Tabellen – „trade_calendar“, „stock_basic“, „stock_daily“ – mit Zeilenanzahl, Festplattennutzung und Start-/Enddatum. Drucken Sie den zurückgegebenen „DataFrame“ aus, um alle Tabellen anzuzeigen:
>>> print(overview)
has_data size records pk1 records1 min1 \
table
trade_calendar True 1.8MB 70K cal_date 12865 19901012
hk_trade_calendar False 0 0 cal_date unknown N/A
us_trade_calendar False 0 0 cal_date unknown N/A
stock_basic True 852KB 5K ts_code 5396 000001.SZ
hk_stock_basic False 0 0 ts_code unknown N/A
... ... ... ... ... ... ...
cn_cpi False 0 0 month unknown N/A
cn_ppi False 0 0 month unknown N/A
cn_money False 0 0 month unknown N/A
cn_sf False 0 0 month unknown N/A
cn_pmi False 0 0 month unknown N/A
max1 pk2 records2 min2 max2
table
trade_calendar 20251231 exchange 7 CFFEX SZSE
hk_trade_calendar N/A None None None None
us_trade_calendar N/A None None None None
stock_basic 920128.BJ None None None None
hk_stock_basic N/A None None None None
... ... ... ... ... ...
cn_cpi N/A None None None None
cn_ppi N/A None None None None
cn_money N/A None None None None
cn_sf N/A None None None None
cn_pmi N/A None None None None
[104 rows x 11 columns]
5.4. Die wichtigste Datentabelle
Bei der ersten Verwendung sind Tabellen häufig leer – qteasy vereinfacht durch sein Design die Erfassung und Verwendung von Finanzdaten.
Grundlegende Daten lassen sich leicht herunterladen, einige Tabellen sind jedoch wichtiger – füllen Sie sie zuerst aus, da andere von ihnen und von qteasy selbst abhängen:
„trade_calendar“ – Handelskalender für alle Börsen (Handelstag, Börsencode/Name). Kern zu qteasy: Viele Funktionen schlagen ohne sie fehl oder werden langsamer. Wird verwendet, um Handelstage und Download-Datumsbereiche zu bestimmen – füllen Sie diese Tabelle zuerst aus.
„stock_basic“ – Aktien-Grundlagentabelle mit Code, Name, Listungs-/Delisting-Daten, Branche, Region usw. Grundlage für tägliche K-Line- und Finanztabellen für Aktien; Priorität beim Ausfüllen dieser Tabelle.
„index_basic“ – Index-Grundlagentabelle mit Code, Name, Veröffentlichungs-/Delisting-Daten usw. Grundlage für Index-Tages-K-Line- und Konstituententabellen; Priorität beim Ausfüllen dieser Tabelle.
„fund_basic“ – Fonds-Grundlagentabelle mit Code, Name, Typ, Größe usw. Grundlage für die täglichen K-Line- und NAV-Tabellen des Fonds; Priorität beim Ausfüllen dieser Tabelle.
Sobald diese Schlüsseltabellen gefüllt sind, funktionieren die meisten qteasy-Datenfunktionen reibungslos.
qteasy definiert außerdem vier Systemtabellen für Live-Handelsdatensätze:
„sys_op_live_accounts“ – Stammtabelle für Live-Handelskonten mit Konto-ID, Name, Typ, Status usw.
„sys_op_positions“ – Live-Positionstabelle mit Konto-ID, Sicherheitscode/-name, Menge, Kosten usw.
„sys_op_trade_orders“ – Live-Auftragstabelle mit Konto-ID, Bestellzeit/-typ, Sicherheitscode, Menge, Preis usw.
„sys_op_trade_results“ – Live-Ausfülltabelle mit Konto-ID, Füllzeit, Sicherheitscode, Menge, Preis usw.
Diese vier Systemtabellen unterstützen den Live-Handel; Daten werden automatisch generiert – füllen, anzeigen oder löschen Sie sie nicht manuell.
Andere Tische
Neben wichtigen Tabellen definiert DataSource viele weitere Tabellen, die Grundlagen, tägliche K-Linie, Finanzen, Dividenden, Gewinnberichte, Makrodaten usw. abdecken:
Marktdatentabellen – OHLCV in verschiedenen Häufigkeiten für Aktien, Fonds, Indizes
Grundlagentabellen – Aktien, Fonds, Indizes, Futures, Optionen usw.
Indikatortabellen – technische, fundamentale, Makroindikatoren usw.
Finanzberichtstabellen – Bilanz, Gewinn- und Verlustrechnung, Cashflow usw.
Gewinnberichtstabellen – Expressberichte, Gewinnprognosen, Prognosen usw.
Dividenden- und Block-Trade-Tabellen – Dividenden, Block-Trades, Aktionärs-Trades usw.
Referenztabellen – Makro-, Branchen-, Börsen- und andere Referenzdaten
Informationen zu Tabellendefinitionen und Datentypen finden Sie unter „get_table_info()“ oder im nächsten Kapitel.
5.5. Daten aus Tabellen lesen
Nach dem Ausfüllen können Sie mit „read_table_data()“ mit Datums-/Codefiltern lesen, ohne sich Gedanken über Speicherdetails machen zu müssen.
Um große Lesevorgänge zu vermeiden, übergeben Sie immer Filter. Mit „read_table_data()“ können Sie nach Sicherheitscode und Datumsbereich filtern:
Aktien: Ein Sicherheitscode oder durch Kommas getrennte Codes. Wenn der Primärschlüssel einen Sicherheitscode enthält, filtern Sie die Ausgabe nach diesen Codesstart: Ein Datum im Format „JJJJMMTT“. Wenn der Tabellenprimärschlüssel Uhrzeit oder Datum enthält, filtern Sie die Zeilen zwischen „Start“ und „Ende“. „start“/„end“ muss als Paar angegeben werdenEnde: Ein Datum im Format „JJJJMMTT“. Wenn der Tabellenprimärschlüssel Uhrzeit oder Datum enthält, filtern Sie die Zeilen zwischen „Start“ und „Ende“. „start“/„end“ muss als Paar angegeben werden
„DataSource“ filtert Daten automatisch anhand Ihrer Kriterien, zum Beispiel:
Lesen Sie die täglichen K-Line-Daten für „000651.SZ“ von „stock_daily“ zwischen dem 01.01.2024 und dem 15.01.2024:
>>> ds.read_table_data(table='stock_daily', shares='000651.SZ', start='20240101', end='20240115')
open high low ... pct_chg vol amount
ts_code trade_date ...
000651.SZ 2024-01-03 32.00 32.08 31.70 ... -0.7181 254468.92 810315.013
2024-01-04 31.90 32.01 31.45 ... 0.4717 333398.05 1057458.411
2024-01-08 33.12 33.21 32.85 ... -0.2426 415911.34 1372722.050
2024-01-02 32.17 32.20 31.96 ... -0.4352 253797.30 814257.175
2024-01-15 33.45 33.95 33.42 ... 0.6544 295681.34 996815.725
2024-01-11 33.66 33.82 33.42 ... -0.2376 284088.74 955075.100
2024-01-09 32.81 33.55 32.65 ... 1.7933 438207.66 1454959.637
2024-01-10 33.35 33.84 33.28 ... 0.5375 366485.52 1233441.572
2024-01-12 33.50 33.83 33.42 ... 0.0893 224012.73 753931.821
2024-01-05 32.05 33.29 31.62 ... 3.2238 832156.75 2738167.636
[10 rows x 9 columns]
„DataSource“ wendet die richtigen Filter für jede Tabelle an und ignoriert unnötige Parameter. Wenn Sie beispielsweise grundlegende Informationen für zwei Aktien abfragen, ist das Handelsdatum nicht erforderlich – „qteasy“ ignoriert „Start“/„Ende“ mit einem Hinweis. Der Parameter „Aktien“ funktioniert auch für Fonds, Indizes, Futures und Optionen, nicht nur für Aktien:
>>> ds.read_table_data(table='stock_basic', shares='000651.SZ,000700.SZ', start='20240101', end='20240131')
/Users/jackie/Projects/qteasy/qteasy/database.py:1314: RuntimeWarning: list index out of range
can not find date-like primary key in the table stock_basic!
passed start(2024-01-01) and end(2024-01-31) arguments will be ignored!
warnings.warn(msg, RuntimeWarning)
symbol name area industry ... list_status list_date delist_date is_hs
ts_code ...
000651.SZ 651 格力电器 广东 家用电器 ... L 19961118 NaN S
000700.SZ 700 模塑科技 江苏 汽车配件 ... L 19970228 NaN S
[2 rows x 14 columns]
Weitere Informationen zu read_table_data() finden Sie in der DataSource-Referenz.
5.6. Daten zu Tabellen hinzufügen
Lesevorgänge schlagen fehl, wenn die Tabellen leer oder nicht ausreichend sind – füllen Sie die Tabellen zuerst.
Notiz:
Dies gilt nur für manuelle Schreibvorgänge; Automatisches Herunterladen, Reinigen und Nachfüllen werden später behandelt.
Füllen Sie Tabellen über „update_table_data()“ und schreiben Sie einen „DataFrame“ mit drei Parametern:
table: Name der Zieltabelle, in die geschrieben werden solldf: Ein „DataFrame“, der Daten enthält, die in eine Tabelle geschrieben werden sollenmerge_type: Bei „update“ werden vorhandene Zeilen in der Tabelle aktualisiert; Bei „Ignorieren“ werden doppelte Zeilen übersprungen.
Bei „update_table_data()“ ist keine genaue Schemaübereinstimmung erforderlich – qteasy normalisiert das Format und dedupliziert vor dem Schreiben.
Beispieldaten werden unten nur zur Demonstration aufgeführt.
>>> import pandas as pd
>>> df = pd.DataFrame({
... 'ts_code': ['000001.SZ', '000002.SZ', '000003.SZ', '000004.SZ', '000005.SZ',
... '000001.SZ', '000002.SZ', '000003.SZ', '000004.SZ', '000005.SZ'],
... 'trade_date': ['20211112', '20211112', '20211112', '20211112', '20211112',
... '20211113', '20211113', '20211113', '20211113', '20211113'],
... 'open': [1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],
... 'high': [2., 3., 4., 5., 6., 7., 8., 9., 10., 1.],
... 'low': [3., 4., 5., 6., 7., 8., 9., 10., 1., 2.],
... 'close': [4., 5., 6., 7., 8., 9., 10., 1., 2., 3.]
... })
>>> print(df)
ts_code trade_date open high low close
0 000001.SZ 20211112 1.0 2.0 3.0 4.0
1 000002.SZ 20211112 2.0 3.0 4.0 5.0
2 000003.SZ 20211112 3.0 4.0 5.0 6.0
3 000004.SZ 20211112 4.0 5.0 6.0 7.0
4 000005.SZ 20211112 5.0 6.0 7.0 8.0
5 000001.SZ 20211113 6.0 7.0 8.0 9.0
6 000002.SZ 20211113 7.0 8.0 9.0 10.0
7 000003.SZ 20211113 8.0 9.0 10.0 1.0
8 000004.SZ 20211113 9.0 10.0 1.0 2.0
9 000005.SZ 20211113 10.0 1.0 2.0 3.0
Das obige Beispiel „DataFrame“ wird in „index_daily“ geschrieben. Derzeit ist „index_daily“ leer und sein „Schema“ unterscheidet sich geringfügig vom „DataFrame“:
Das Tabellenschema „index_daily“ definiert 11 Spalten, während das Beispiel „DataFrame“ oben nur 6 hat; Alle „DataFrame“-Spalten befinden sich weiterhin im „index_daily“-Schema.
Die Tabelle „index_daily“ ist derzeit leer und enthält keine Daten.
>>> info = ds.get_table_info('index_daily')
<index_daily>--<指数日线行情>
0 MB/0 records on disc
primary keys:
----------------------------------------
1: ts_code: <unknown> entries
starts: N/A, end: N/A
2: trade_date: <unknown> entries
starts: N/A, end: N/A
columns of table:
------------------------------------
columns dtypes remarks
0 ts_code varchar(20) 证券代码
1 trade_date date 交易日期
2 open float 开盘价
3 high float 最高价
4 low float 最低价
5 close float 收盘价
6 pre_close float 昨收价
7 change float 涨跌额
8 pct_chg float 涨跌幅
9 vol double 成交量(手)
10 amount double 成交额(千元)
Als nächstes schreiben wir Daten; Bei Erfolg gibt die Methode folgende Zeilen zurück:
>>> ds.update_table_data(table='index_daily', df=df)
10
Nach dem Schreiben können wir die gerade eingefügten Daten zurücklesen.
Viele Spalten lauten „NaN“, weil das geschriebene „df“ diese Felder nicht enthielt.
>>> df = ds.read_table_data('index_daily', shares='000001.SZ, 000002.SZ')
>>> print(df)
open high low close pre_close change pct_chg vol \
ts_code trade_date
000001.SZ 2021-11-12 1.0 2.0 3.0 4.0 NaN NaN NaN NaN
000002.SZ 2021-11-12 2.0 3.0 4.0 5.0 NaN NaN NaN NaN
000001.SZ 2021-11-13 6.0 7.0 8.0 9.0 NaN NaN NaN NaN
000002.SZ 2021-11-13 7.0 8.0 9.0 10.0 NaN NaN NaN NaN
amount
ts_code trade_date
000001.SZ 2021-11-12 NaN
000002.SZ 2021-11-12 NaN
000001.SZ 2021-11-13 NaN
000002.SZ 2021-11-13 NaN
5.7. Drop-Tisch – seien Sie vorsichtig; Die Löschung ist unwiderruflich!!
Sie können auch ganze Tabellen löschen – qteasy unterstützt keine teilweisen Löschungen; Seien Sie sehr vorsichtig.
DataSource ist für Speicherung und Lesevorgänge optimiert, nicht für häufiges Löschen – es handelt sich um ein Data Warehouse, nicht um eine allgemeine Datenbank.
Die DataSource-Methode drop_table_data() löscht eine gesamte Tabelle und kann nicht rückgängig gemacht werden!
Um versehentliches Löschen zu verhindern, werden standardmäßig „drop_table_data()“-Fehler angezeigt – z. beim Löschen temporärer „index_daily“-Daten:
>>> ds.drop_table_data('index_daily')
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[19], line 1
----> 1 ds.drop_table_data('index_daily')
File ~/Projects/qteasy/qteasy/database.py:1587, in DataSource.drop_table_data(self, table)
1584 if not self.allow_drop_table:
1585 err = RuntimeError('Can\'t drop table from current datasource according to setting, please check: '
1586 'datasource.allow_drop_table')
-> 1587 raise err
1589 if self.source_type == 'db':
1590 self._drop_db_table(db_table=table)
RuntimeError: Can't drop table from current datasource according to setting, please check: datasource.allow_drop_table
Setzen Sie „allow_drop_table“ auf „True“, um Drops zuzulassen. Setzen Sie es anschließend wieder auf „False“.
Der folgende Code löscht „index_daily“; Danach schlagen Lesevorgänge aus dieser Tabelle fehl:
>>> ds.allow_drop_table = True
>>> ds.drop_table_data('index_daily')
>>> ds.allow_drop_table = False
>>> df = ds.read_table_data(table='index_daily')
>>> print(df)
Empty DataFrame
Columns: []
Index: []
5.8. Zusammenfassung
Wir verstehen jetzt DataSource, die Kernklasse von qteasy für die Verwaltung von Finanzhistoriendaten, einschließlich:
Was ist
DataSourceund wie erstellt man einen?Extrahieren von Daten aus DataSource
Arbeiten mit DataSource
Spätere Kapitel behandeln mehr:
Welche nützlichen Finanzdaten sind in DataSource enthalten?
Wie lade ich DataSource stapelweise herunter und fülle es aus?
Informationen effektiver aus DataSource extrahieren?