Typen-API
Die Klasse DuckDBPyType steht für eine Typinstanz unserer Datentypen.
Umwandlung aus anderen Typen
Um die API möglichst einfach nutzbar zu machen, haben wir implizite Umwandlungen von bestehenden Typobjekten in eine DuckDBPyType-Instanz hinzugefügt. Das bedeutet: Wo ein DuckDBPyType-Objekt erwartet wird, können Sie auch eine der unten aufgeführten Varianten angeben.
Python-Built-ins
Die folgende Tabelle zeigt die Zuordnung von Python-Built-in-Typen zu DuckDB-Typen.
| Built-in-Typen | DuckDB-Typ |
|---|---|
| bool | BOOLEAN |
| bytearray | BLOB |
| bytes | BLOB |
| float | DOUBLE |
| int | BIGINT |
| str | VARCHAR |
Numpy-DTypes
Die folgende Tabelle zeigt die Zuordnung von Numpy-DType zu DuckDB-Typ.
| Typ | DuckDB-Typ |
|---|---|
| bool | BOOLEAN |
| float32 | FLOAT |
| float64 | DOUBLE |
| int16 | SMALLINT |
| int32 | INTEGER |
| int64 | BIGINT |
| int8 | TINYINT |
| uint16 | USMALLINT |
| uint32 | UINTEGER |
| uint64 | UBIGINT |
| uint8 | UTINYINT |
Verschachtelte Typen
list[child_type]
list-Typobjekte werden auf einen LIST-Typ des Kindtyps abgebildet.
Dieser kann ebenfalls beliebig verschachtelt sein.
import duckdb.sqltypesfrom typing import Union
duckdb.sqltypes.DuckDBPyType(list[dict[Union[str, int], str]])MAP(UNION(u1 VARCHAR, u2 BIGINT), VARCHAR)[]dict[key_type, value_type]
dict-Typobjekte werden auf einen MAP-Typ aus Schlüsseltyp und Werttyp abgebildet.
import duckdb.sqltypes
print(duckdb.sqltypes.DuckDBPyType(dict[str, int]))MAP(VARCHAR, BIGINT){'a': field_one, 'b': field_two, ..., 'n': field_n}
dict-Objekte werden auf ein STRUCT abgebildet, das aus den Schlüsseln und Werten des Dicts besteht.
import duckdb.sqltypes
print(duckdb.sqltypes.DuckDBPyType({'a': str, 'b': int}))STRUCT(a VARCHAR, b BIGINT)Union[type_1, ... type_n]
typing.Union-Objekte werden auf einen UNION-Typ der angegebenen Typen abgebildet.
import duckdb.sqltypesfrom typing import Union
print(duckdb.sqltypes.DuckDBPyType(Union[int, str, bool, bytearray]))UNION(u1 BIGINT, u2 VARCHAR, u3 BOOLEAN, u4 BLOB)Erzeugungsfunktionen
Für die Built-in-Typen können Sie die in duckdb.sqltypes definierten Konstanten verwenden:
| DuckDB-Typ |
|---|
| BIGINT |
| BIT |
| BLOB |
| BOOLEAN |
| DATE |
| DOUBLE |
| FLOAT |
| HUGEINT |
| INTEGER |
| INTERVAL |
| SMALLINT |
| SQLNULL |
| TIME_TZ |
| TIME |
| TIMESTAMP_MS |
| TIMESTAMP_NS |
| TIMESTAMP_S |
| TIMESTAMP_TZ |
| TIMESTAMP |
| TINYINT |
| UBIGINT |
| UHUGEINT |
| UINTEGER |
| USMALLINT |
| UTINYINT |
| UUID |
| VARCHAR |
Für die komplexen Typen gibt es Methoden am Objekt DuckDBPyConnection oder am Modul duckdb.
Überall, wo ein DuckDBPyType akzeptiert wird, akzeptieren wir auch eines der Typobjekte, die implizit in einen DuckDBPyType umgewandelt werden können.
list_type | array_type
Parameter:
child_type: DuckDBPyType
struct_type | row_type
Parameter:
fields: Union[list[DuckDBPyType], dict[str, DuckDBPyType]]
map_type
Parameter:
key_type: DuckDBPyTypevalue_type: DuckDBPyType
decimal_type
Parameter:
width: intscale: int
union_type
Parameter:
members: Union[list[DuckDBPyType], dict[str, DuckDBPyType]]
string_type
Parameter:
collation: Optional[str]