Pydantic
Pydantic is a data validation library in Python.LanceDB integrates with Pydantic for schema inference, data ingestion, and query result casting.UsingLanceModel, users can seamlesslyintegrate Pydantic with the rest of the LanceDB APIs.
importlancedbfromlancedb.pydanticimportVector,LanceModelclassPersonModel(LanceModel):name:strage:intvector:Vector(2)url="./example"db=lancedb.connect(url)table=db.create_table("person",schema=PersonModel)table.add([PersonModel(name="bob",age=1,vector=[1.0,2.0]),PersonModel(name="alice",age=2,vector=[3.0,4.0]),])asserttable.count_rows()==2person=table.search([0.0,0.0]).limit(1).to_pydantic(PersonModel)assertperson[0].name=="bob"
Vector Field
LanceDB provides aVector(dim)
method to define avector Field in a Pydantic Model.
lancedb.pydantic.Vector
Vector(dim:int,value_type:DataType=pa.float32(),nullable:bool=True)->Type[FixedSizeListMixin]
Pydantic Vector Type.
Warning
Experimental feature.
Parameters:
dim
(int
) –The dimension of the vector.
value_type
(DataType
, default:float32()
) –The value type of the vector, by default pa.float32()
nullable
(bool
, default:True
) –Whether the vector is nullable, by default it is True.
Examples:
>>>importpydantic>>>fromlancedb.pydanticimportVector...>>>classMyModel(pydantic.BaseModel):...id:int...url:str...embeddings:Vector(768)>>>schema=pydantic_to_schema(MyModel)>>>assertschema==pa.schema([...pa.field("id",pa.int64(),False),...pa.field("url",pa.utf8(),False),...pa.field("embeddings",pa.list_(pa.float32(),768))...])
Source code inlancedb/pydantic.py
Type Conversion
LanceDB automatically convert Pydantic fields toApache Arrow DataType.
Current supported type conversions:
Pydantic Field Type | PyArrow Data Type |
---|---|
int | pyarrow.int64 |
float | pyarrow.float64 |
bool | pyarrow.bool |
str | pyarrow.utf8() |
list | pyarrow.List |
BaseModel | pyarrow.Struct |
Vector(n) | pyarrow.FixedSizeList(float32, n) |
LanceDB supports to create Apache Arrow Schema from aPydantic BaseModelviapydantic_to_schema() method.
lancedb.pydantic.pydantic_to_schema
Convert aPydantic Model to aPyArrow Schema.
Parameters:
model
(Type[BaseModel]
) –The Pydantic BaseModel to convert to Arrow Schema.
Returns:
Schema
–The Arrow Schema
Examples:
>>>fromtypingimportList,Optional>>>importpydantic>>>fromlancedb.pydanticimportpydantic_to_schema,Vector>>>classFooModel(pydantic.BaseModel):...id:int...s:str...vec:Vector(1536)# fixed_size_list<item: float32>[1536]...li:List[int]...>>>schema=pydantic_to_schema(FooModel)>>>assertschema==pa.schema([...pa.field("id",pa.int64(),False),...pa.field("s",pa.utf8(),False),...pa.field("vec",pa.list_(pa.float32(),1536)),...pa.field("li",pa.list_(pa.int64()),False),...])