Zum Inhalt springen

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.sqltypes
from 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.sqltypes
from 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: DuckDBPyType
  • value_type: DuckDBPyType

decimal_type

Parameter:

  • width: int
  • scale: int

union_type

Parameter:

  • members: Union[list[DuckDBPyType], dict[str, DuckDBPyType]]

string_type

Parameter:

  • collation: Optional[str]