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
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
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"
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:
- Override the column
payload
insome_table
to use the typePayload
- 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.