Migrating to sqlc-gen-python
Starting in sqlc 1.16.0, built-in Python support has been deprecated. It will be fully removed in 1.17.0 in favor of sqlc-gen-python.
This guide will walk you through migrating to the sqlc-gen-python plugin, which involves three steps.
Add the sqlc-gen-python plugin
Migrate each package
Re-generate the code
Add the sqlc-gen-python plugin
In your configuration file, add a plugins array if you don’t have one
already. Add the following configuration for the plugin:
{
"version": "2",
"plugins": [
{
"name": "py",
"wasm": {
"url": "https://downloads.sqlc.dev/plugin/sqlc-gen-python_1.0.0.wasm",
"sha256": "aca83e1f59f8ffdc604774c2f6f9eb321a2b23e07dc83fc12289d25305fa065b"
}
}
]
}
version: "2"
plugins:
- name: "py"
wasm:
url: "https://downloads.sqlc.dev/plugin/sqlc-gen-python_1.0.0.wasm"
sha256: "aca83e1f59f8ffdc604774c2f6f9eb321a2b23e07dc83fc12289d25305fa065b"
Migrate each package
Your package configuration should currently looks something like this for JSON.
"sql": [
{
"schema": "schema.sql",
"queries": "query.sql",
"engine": "postgresql",
"gen": {
"python": {
"out": "src",
"package": "foo",
"emit_sync_querier": true,
"emit_async_querier": true,
"query_parameter_limit": 5
}
}
}
]
Or this if you’re using YAML.
sql:
- schema: "schema.sql"
queries: "query.sql"
engine: "postgresql"
gen:
python:
out: "src"
package: "foo"
emit_sync_querier: true
emit_async_querier: true
query_parameter_limit: 5
To use the plugin, you’ll need to replace the gen mapping with the codegen
collection. Add the plugin field, setting it to py. All fields other than
out need to be moved into the options mapping.
After you’re done, it should look like this for JSON.
"sql": [
{
"schema": "schema.sql",
"queries": "query.sql",
"engine": "postgresql",
"codegen": [
{
"out": "src",
"plugin": "py",
"options": {
"package": "authors",
"emit_sync_querier": true,
"emit_async_querier": true,
"query_parameter_limit": 5
}
}
]
}
]
Or this for YAML.
sql:
- schema: "schema.sql"
queries: "query.sql"
engine: "postgresql"
codegen:
- plugin: "py"
out: "src"
options:
package: "foo"
emit_sync_querier: true
emit_async_querier: true
query_parameter_limit: 5
Re-generate the code
Run sqlc generate. The plugin will produce the same output, so you shouldn’t
see any changes. The first time sqlc generate is run, the plugin must be
downloaded and compiled, resulting in a slightly longer runtime. Subsequent
generate calls will be fast.