Skip to content

Integrating Instructor with SQLModel

SQLModel is a library designed for interacting with SQL databases from Python code using Python objects. SQLModel is based on Pydantic and SQLAlchemy and was created by tiangolo who also developed FastAPI. So you can expect seamless integration across all these libraries, reducing code duplicating and improving your developer experience.

Example: Adding responses from Instructor directly to your DB

Defining the Models

First we'll define a model that will serve as a table for our database and the structure of our outputs from Instructor

Model Definition

You'll need to subclass your models with both SQLModel and instructor.OpenAISchema for them to work with SQLModel

from typing import Optional
from sqlmodel import Field, SQLModel
import instructor


class Hero(SQLModel, instructor.OpenAISchema, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    secret_name: str
    age: Optional[int] = None

Generating a record

The create_hero function will query OpenAI for a Hero record

import instructor
from openai import OpenAI


client = instructor.from_openai(OpenAI())


def create_hero() -> Hero:
    return client.chat.completions.create(
        model="gpt-3.5-turbo",
        response_model=Hero,
        messages=[
            {"role": "user", "content": "Make a new superhero"},
        ],
    )

Inserting the response into the DB

engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)

hero = create_hero()
print(hero.model_dump())
#> {'name': 'Superman', 'secret_name': 'Clark Kent', 'age': 30, 'id': None}

with Session(engine) as session:
    session.add(hero)
    session.commit()

Image of hero record in the database

And there you have it! You can now use the same models for your database and Instructor enabling them work seamlessly! Also checkout the FastAPI guide to see how you can use these models in an API as well.