Skip to content

Latest commit

 

History

History
122 lines (89 loc) · 2.79 KB

README.md

File metadata and controls

122 lines (89 loc) · 2.79 KB

Usage

version: "2"
plugins:
  - name: py
    wasm:
      url: https://downloads.sqlc.dev/plugin/sqlc-gen-python_1.3.0.wasm
      sha256: fbedae96b5ecae2380a70fb5b925fd4bff58a6cfb1f3140375d098fbab7b3a3c
sql:
  - schema: "schema.sql"
    queries: "query.sql"
    engine: postgresql
    codegen:
      - out: src/authors
        plugin: py
        options:
          package: authors
          emit_sync_querier: true
          emit_async_querier: true

Emit Pydantic Models instead of dataclasses

Option: emit_pydantic_models

By default, sqlc-gen-python will emit dataclasses for the models. If you prefer to use pydantic models, you can enable this option.

with emit_pydantic_models

from pydantic import BaseModel

class Author(pydantic.BaseModel):
    id: int
    name: str

without emit_pydantic_models

import dataclasses

@dataclasses.dataclass()
class Author:
    id: int
    name: str

Use enum.StrEnum for Enums

Option: emit_str_enum

enum.StrEnum was introduce in Python 3.11.

enum.StrEnum is a subclass of str that is also a subclass of Enum. This allows for the use of Enum values as strings, compared to strings, or compared to other enum.StrEnum types.

This is convenient for type checking and validation, as well as for serialization and deserialization.

By default, sqlc-gen-python will emit (str, enum.Enum) for the enum classes. If you prefer to use enum.StrEnum, you can enable this option.

with emit_str_enum

class Status(enum.StrEnum):
    """Venues can be either open or closed"""
    OPEN = "op!en"
    CLOSED = "clo@sed"

without emit_str_enum (current behavior)

class Status(str, enum.Enum):
    """Venues can be either open or closed"""
    OPEN = "op!en"
    CLOSED = "clo@sed"

Override Column Types

Option: overrides

You can override the SQL to Python type mapping for specific columns using the overrides option. This is useful for columns with JSON data or other custom types.

Example configuration:

options:
  package: authors
  emit_pydantic_models: true
  overrides:
    - column: "some_table.payload"
      py_import: "my_lib.models"
      py_type: "Payload"

This will:

  1. Override the column payload in some_table to use the type Payload
  2. Add an import for my_lib.models to the models file

Example output:

# Code generated by sqlc. DO NOT EDIT.
# versions:
#   sqlc v1.28.0

import datetime
import pydantic
from typing import Any

import my_lib.models


class SomeTable(pydantic.BaseModel):
    id: int
    created_at: datetime.datetime
    payload: my_lib.models.Payload

This is similar to the overrides functionality in the Go version of sqlc.