Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.
This page describes an upcoming change (September 1, 2026) for customers who use Python to connect to PlanetScale Vitess databases.
PlanetScale is deploying a protocol fix to Vitess that may result in timeouts in Python applications. To avoid problems, explicitly configure autocommit by adding autocommit=True or init_command="set autocommit=0" to your connect arguments.This change affects Python apps that connect to PlanetScale Vitess using SQLAlchemy, PyMySQL, asyncmy, or aiomysql and do not explicitly configure autocommit.
Add autocommit=True to your connect arguments. This is recommended if you are relying on default behavior. This setting ensures that your application continues running in the same mode after PlanetScale rolls out the Vitess change.
Add init_command="set autocommit=0" to your connect arguments. This is recommended if your app manages all SQL queries with transactions or if it keeps connections open for less than 20 seconds.
PlanetScale is changing Vitess so that it reports the correct autocommit value during the initial handshake packet. Some Python MySQL drivers (PyMySQL, asyncmy, aiomysql) use that initial handshake packet to decide the connection’s autocommit behavior. Other Python MySQL drivers (mysql-connector-python, mysqlclient) and MySQL client libraries in other languages do not rely solely on the initial handshake packet and are not affected by the issue described below.Because of the current Vitess behavior, the affected Python clients create connections configured with autocommit on, which is inconsistent with their intent to have autocommit off. After PlanetScale deploys the change, apps that use the client’s default (autocommit=False) begin correctly running with autocommit off.After the change, any clients with implicit autocommit=False intent begin to observe actual autocommit=False behavior. In this mode, statements that are outside of an explicit transaction start an implicit transaction and the implicit transaction stays open. The implicit transaction follows the same timeout rules as any other transaction, which means it times out if it is not committed or rolled back within 20 seconds.In other words, if you run the equivalent of execute("SELECT 1"); sleep 21; execute("SELECT 1") today, it works. After the change, the second query returns a transaction timeout error.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"PlanetScale","description":"PlanetScale is a relational database platform for Vitess, Neki, and Postgres that gives you scale, performance, and reliability without sacrificing developer experience.","colors":{"primary":"#0e73cc","light":"#47b7f8","dark":"#f15817"},"logo":{"light":"https://mintcdn.com/planetscale-2/xUilVHToUFALai8a/logo/light.png?fit=max\u0026auto=format\u0026n=xUilVHToUFALai8a\u0026q=85\u0026s=cccd3c9fc813c01b899ab7af15a115b1","dark":"https://mintcdn.com/planetscale-2/xUilVHToUFALai8a/logo/dark.png?fit=max\u0026auto=format\u0026n=xUilVHToUFALai8a\u0026q=85\u0026s=4153888dc0ef54ddc3464738a2d7ee6e","href":"https://planetscale.com"},"favicon":"https://mintcdn.com/planetscale-2/DJh9Bv1aUZHTVDnK/favicon.svg?fit=max\u0026auto=format\u0026n=DJh9Bv1aUZHTVDnK\u0026q=85\u0026s=cc6ec9d8d0deb3450719bb4b5b6df73a","background":{"color":{"light":"#fafafa","dark":"#111111"}},"navbar":{"links":[{"href":"https://auth.planetscale.com/sign-in","label":"Log in"},{"href":"https://auth.planetscale.com/sign-up","label":"Get started"}],"primary":{"type":"button","label":"Get in touch","href":"https://planetscale.com/contact"}},"footer":{"socials":{"x":"https://twitter.com/planetscale","github":"https://github.com/planetscale","linkedin":"https://www.linkedin.com/company/planetscale","youtube":"https://www.youtube.com/c/PlanetScale","discord":"https://pscale.link/community","facebook":"https://www.facebook.com/planetscaledata"}},"seo":{"metatags":{"canonical":"https://planetscale.com/docs"}},"fonts":{"heading":{"family":"Inter"},"body":{"family":"Inter"}},"integrations":{"segment":{"key":"9Ujczlrndco2w8fcFAakL0FT4bsJCCh3"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://planetscale.com/blog"},{"anchor":"Contact Us","icon":"headset","href":"https://planetscale.com/contact"},{"anchor":"Status","icon":"signal","href":"https://www.planetscalestatus.com/"},{"anchor":"Benchmarks","icon":"chart-line","href":"https://planetscale.com/benchmarks"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"planetscale-2","hasAudioNarration":false,"actualSubdomain":"planetscale-2","customDomains":["planetscale.com"],"gitSource":{"type":"github","owner":"planetscale","repo":"www","deployBranch":"main","contentDirectory":"content/mintlify/docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af1ed7f2da007b7b71e1ac1","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Platform","count":289},{"language":"default","tag":"API Reference","count":269},{"language":"default","tag":"Vitess","count":184},{"language":"default","tag":"Postgres","count":109},{"language":"default","tag":"General API endpoints","count":97},{"language":"default","tag":"Neki","count":58},{"language":"default","tag":"Guides","count":58},{"language":"default","tag":"Vitess API endpoints","count":56},{"language":"default","tag":"Postgres API endpoints","count":51},{"language":"default","tag":"Neki API endpoints","count":50}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"link","url":"https://planetscale.com/contact?initial=support"}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#content-container{column-gap:2rem}.nav-tabs{column-gap:0.5em}.nav-tabs-item{padding:0 8px}.nav-tabs a{color:#616161}.nav-tabs a.text-primary{color:#1a1a1a}.nav-tabs a.text-primary .bg-primary{background-color:#1a1a1a;left:0}.nav-tabs a[href=\"/docs/vitess\"i].text-primary{color:#f15817}.nav-tabs a[href=\"/docs/vitess\"i].text-primary .bg-primary{background-color:#f15817}.nav-tabs a[href=\"/docs/postgres\"i].text-primary{color:#0e73cc}.nav-tabs a[href=\"/docs/postgres\"i].text-primary .bg-primary{background-color:#0e73cc}.nav-tabs a[href=\"/docs/neki\"i].text-primary{color:#8f7200}.nav-tabs a[href=\"/docs/neki\"i].text-primary .bg-primary{background-color:#8f7200}.dark .nav-tabs a{color:#a1a1a1}.dark .nav-tabs a.text-primary{color:#fafafa}.dark .nav-tabs a.text-primary .bg-primary{background-color:#fafafa}.dark .nav-tabs a[href=\"/docs/vitess\"i].text-primary{color:#f15817}.dark .nav-tabs a[href=\"/docs/vitess\"i].text-primary .bg-primary{background-color:#f15817}.dark .nav-tabs a[href=\"/docs/postgres\"i].text-primary{color:#47b7f8}.dark .nav-tabs a[href=\"/docs/postgres\"i].text-primary .bg-primary{background-color:#47b7f8}.dark .nav-tabs a[href=\"/docs/neki\"i].text-primary{color:#fbca00}.dark .nav-tabs a[href=\"/docs/neki\"i].text-primary .bg-primary{background-color:#fbca00}.prose:is(.dark *){color:#c1c1c1}.prose :where(a):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)){color:#0e73cc;font-weight:500}.dark .prose :where(a):not(:where(.not-prose,.not-prose *)){color:#47b7f8}.eyebrow{color:#616161}.dark .eyebrow{color:#a1a1a1}@media (min-width: 1024px){#content-container{padding-top:2rem;padding-right:2rem;padding-left:2.5rem}}#topbar-cta-button a>span{background-color:#fbca00}#topbar-cta-button .text-white,#topbar-cta-button svg{color:#1a1a1a}.group:hover span{opacity:1!important}#navigation-items .text-primary{color:#1a1a1a}.light #navigation-items .text-gray-700{color:#616161}.bg-primary\\/10{background-color:rgba(129, 129, 129, 0.1)}.dark #navigation-items .text-primary{color:#fafafa}.dark .bg-primary\\/10{background-color:rgba(255, 255, 255, 0.1)}body[data-current-path^=\"/vitess\"] svg.bg-primary{background-color:#f15817}body[data-current-path^=\"/vitess\"] .border-primary{border-color:#f15817}body[data-current-path^=\"/vitess\"] #table-of-contents-content .text-primary{color:#f15817}body[data-current-path^=\"/vitess\"] .eyebrow{color:#f15817}body[data-current-path^=\"/vitess\"] .card-group a:hover{border-color:#f15817!important}body[data-current-path^=\"/postgres\"] .eyebrow{color:#0e73cc}.dark body[data-current-path^=\"/postgres\"] .eyebrow{color:#47b7f8}body[data-current-path^=\"/neki\"] svg.bg-primary{background-color:#8f7200}body[data-current-path^=\"/neki\"] [data-component-part=\"card-icon\"]{background-color:#fbca00}body[data-current-path^=\"/neki\"] [data-component-part=\"card-icon\"] svg.bg-primary{background-color:#1a1a1a;transform:scale(0.7);transform-origin:center}body[data-current-path^=\"/neki\"] .border-primary{border-color:#8f7200}body[data-current-path^=\"/neki\"] #table-of-contents-content .text-primary{color:#1a1a1a;background-color:transparent;border-color:#fbca00}body[data-current-path^=\"/neki\"] .eyebrow{display:inline-flex;align-items:center;width:fit-content;height:auto;min-height:1.25rem;padding:0 0.375rem;color:#1a1a1a;background-color:#fbca00}body[data-current-path^=\"/neki\"] .eyebrow:empty,body[data-current-path^=\"/neki\"] .eyebrow[data-empty]{display:none}body[data-current-path^=\"/neki\"] .card-group .card:hover{--primary: 251 202 0;--primary-light: 251 202 0;border-color:#fbca00!important}.dark body[data-current-path^=\"/neki\"] svg.bg-primary{background-color:#fbca00}.dark body[data-current-path^=\"/neki\"] [data-component-part=\"card-icon\"]{background-color:#fbca00}.dark body[data-current-path^=\"/neki\"] [data-component-part=\"card-icon\"] svg.bg-primary{background-color:#1a1a1a}.dark body[data-current-path^=\"/neki\"] .border-primary{border-color:#fbca00}.dark body[data-current-path^=\"/neki\"] #table-of-contents-content .text-primary{color:#fafafa;background-color:transparent;border-color:#fbca00}.dark body[data-current-path^=\"/neki\"] .eyebrow{color:#1a1a1a;background-color:#fbca00}.dark body[data-current-path^=\"/neki\"] .card-group .card:hover{--primary: 251 202 0;--primary-light: 251 202 0;border-color:#fbca00!important}footer div:last-child{display:none}#pagination a,#header,[data-component-part=\"card-content-container\"]{text-wrap:balance}.step:last-of-type [data-component-part=\"step-line\"]{opacity:0}[data-component-part=\"frame-caption\"]{text-wrap:balance}"}],"page":{"pagePath":"vitess/connecting/pymysql-handshake-autocommit","slug":"/vitess/connecting/pymysql-handshake-autocommit","pageMetadata":{"title":"Python autocommit handshake correction","description":"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.","sidebarTitle":"Python autocommit handshake","hidden":true,"href":"/vitess/connecting/pymysql-handshake-autocommit","hiddenSetByFrontmatter":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const __snippet_platformLabels_3vlljw={vitess:`Vitess`,postgres:`Postgres`,neki:`Neki`};const __snippet_combinedPlatformLabels_3vlljw={both:`Vitess and Postgres`,all:`Vitess, Neki, and Postgres`,\"postgres-neki\":`Postgres and Neki`};const __snippet_platformBadgeClassName_3vlljw=`inline-flex items-center gap-1.5 whitespace-nowrap rounded-full border px-2.5 py-1 text-[13px] font-semibold leading-tight no-underline data-[engine=vitess]:data-[state=current]:border-[#ffc59b] data-[engine=vitess]:data-[state=current]:bg-[#ffe8d8] data-[engine=vitess]:data-[state=current]:text-[#672002] dark:data-[engine=vitess]:data-[state=current]:border-[#962d00] dark:data-[engine=vitess]:data-[state=current]:bg-[#3c1403] dark:data-[engine=vitess]:data-[state=current]:text-[#ffe8d8] data-[engine=vitess]:data-[state=link]:border-[#ffc59b] data-[engine=vitess]:data-[state=link]:bg-transparent data-[engine=vitess]:data-[state=link]:text-[#b83a05] dark:data-[engine=vitess]:data-[state=link]:border-[#962d00] dark:data-[engine=vitess]:data-[state=link]:bg-transparent dark:data-[engine=vitess]:data-[state=link]:text-[#ffc59b] data-[engine=postgres]:data-[state=current]:border-[#a9dffe] data-[engine=postgres]:data-[state=current]:bg-[#ddf2ff] data-[engine=postgres]:data-[state=current]:text-[#0e3682] dark:data-[engine=postgres]:data-[state=current]:border-[#144eb6] dark:data-[engine=postgres]:data-[state=current]:bg-[#08204e] dark:data-[engine=postgres]:data-[state=current]:text-[#ddf2ff] data-[engine=postgres]:data-[state=link]:border-[#a9dffe] data-[engine=postgres]:data-[state=link]:bg-transparent data-[engine=postgres]:data-[state=link]:text-[#0b6ec5] dark:data-[engine=postgres]:data-[state=link]:border-[#144eb6] dark:data-[engine=postgres]:data-[state=link]:bg-transparent dark:data-[engine=postgres]:data-[state=link]:text-[#73c7f9] data-[engine=neki]:data-[state=current]:border-[#fbca00] data-[engine=neki]:data-[state=current]:bg-[#fbca00] data-[engine=neki]:data-[state=current]:text-[#1a1a1a] dark:data-[engine=neki]:data-[state=current]:border-[#fbca00] dark:data-[engine=neki]:data-[state=current]:bg-[#fbca00] dark:data-[engine=neki]:data-[state=current]:text-[#1a1a1a] data-[engine=neki]:data-[state=link]:border-[#fbca00] data-[engine=neki]:data-[state=link]:bg-transparent data-[engine=neki]:data-[state=link]:text-[#8f7200] dark:data-[engine=neki]:data-[state=link]:border-[#fbca00] dark:data-[engine=neki]:data-[state=link]:bg-transparent dark:data-[engine=neki]:data-[state=link]:text-[#fbca00] data-[engine=both]:data-[state=current]:border-[#d4d4d4] data-[engine=both]:data-[state=current]:bg-[#f0f0f0] data-[engine=both]:data-[state=current]:text-[#3d3d3d] dark:data-[engine=both]:data-[state=current]:border-[#525252] dark:data-[engine=both]:data-[state=current]:bg-[#2a2a2a] dark:data-[engine=both]:data-[state=current]:text-[#e5e5e5]`;const __snippet_docsHref_3vlljw=path=>path.startsWith(`/`)?path:`/${path}`;const __snippet_PlatformAvailabilityBadges_3vlljw=({current,vitess,postgres,neki})=>{const _components={a:`a`,..._provideComponents()};if(__snippet_combinedPlatformLabels_3vlljw[current]){return _jsx(`div`,{className:`not-prose mint-mb-5 mint-flex mint-flex-wrap mint-items-center mint-gap-2`,role:`group`,\"aria-label\":`Platform availability`,children:_jsx(`span`,{\"data-engine\":`both`,\"data-state\":`current`,\"aria-current\":`true`,className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-whitespace-nowrap mint-rounded-full mint-border mint-px-2.5 mint-py-1 mint-text-[13px] mint-font-semibold mint-leading-tight mint-no-underline data-[engine=vitess]:data-[state=current]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=current]:mint-bg-[#ffe8d8] data-[engine=vitess]:data-[state=current]:mint-text-[#672002] dark:data-[engine=vitess]:data-[state=current]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=current]:mint-bg-[#3c1403] dark:data-[engine=vitess]:data-[state=current]:mint-text-[#ffe8d8] data-[engine=vitess]:data-[state=link]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=link]:mint-bg-transparent data-[engine=vitess]:data-[state=link]:mint-text-[#b83a05] dark:data-[engine=vitess]:data-[state=link]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=link]:mint-bg-transparent dark:data-[engine=vitess]:data-[state=link]:mint-text-[#ffc59b] data-[engine=postgres]:data-[state=current]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=current]:mint-bg-[#ddf2ff] data-[engine=postgres]:data-[state=current]:mint-text-[#0e3682] dark:data-[engine=postgres]:data-[state=current]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=current]:mint-bg-[#08204e] dark:data-[engine=postgres]:data-[state=current]:mint-text-[#ddf2ff] data-[engine=postgres]:data-[state=link]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=link]:mint-bg-transparent data-[engine=postgres]:data-[state=link]:mint-text-[#0b6ec5] dark:data-[engine=postgres]:data-[state=link]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=link]:mint-bg-transparent dark:data-[engine=postgres]:data-[state=link]:mint-text-[#73c7f9] data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] dark:data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] data-[engine=neki]:data-[state=link]:mint-bg-transparent data-[engine=neki]:data-[state=link]:mint-text-[#8f7200] dark:data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=link]:mint-bg-transparent dark:data-[engine=neki]:data-[state=link]:mint-text-[#fbca00] data-[engine=both]:data-[state=current]:mint-border-[#d4d4d4] data-[engine=both]:data-[state=current]:mint-bg-[#f0f0f0] data-[engine=both]:data-[state=current]:mint-text-[#3d3d3d] dark:data-[engine=both]:data-[state=current]:mint-border-[#525252] dark:data-[engine=both]:data-[state=current]:mint-bg-[#2a2a2a] dark:data-[engine=both]:data-[state=current]:mint-text-[#e5e5e5]`,children:__snippet_combinedPlatformLabels_3vlljw[current]})})}const paths={vitess,postgres,neki};const others=[`vitess`,`neki`,`postgres`].filter(engine=>engine!==current\u0026\u0026paths[engine]);const engines=__snippet_platformLabels_3vlljw[current]?[current,...others]:others;const only=engines.length===1;return _jsx(`div`,{className:`not-prose mint-mb-5 mint-flex mint-flex-wrap mint-items-center mint-gap-2`,role:`group`,\"aria-label\":`Platform availability`,children:engines.map(engine=>{const label=only?`${__snippet_platformLabels_3vlljw[engine]} only`:__snippet_platformLabels_3vlljw[engine];if(engine===current){return _jsx(`span`,{\"data-engine\":engine,\"data-state\":`current`,\"aria-current\":`true`,className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-whitespace-nowrap mint-rounded-full mint-border mint-px-2.5 mint-py-1 mint-text-[13px] mint-font-semibold mint-leading-tight mint-no-underline data-[engine=vitess]:data-[state=current]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=current]:mint-bg-[#ffe8d8] data-[engine=vitess]:data-[state=current]:mint-text-[#672002] dark:data-[engine=vitess]:data-[state=current]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=current]:mint-bg-[#3c1403] dark:data-[engine=vitess]:data-[state=current]:mint-text-[#ffe8d8] data-[engine=vitess]:data-[state=link]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=link]:mint-bg-transparent data-[engine=vitess]:data-[state=link]:mint-text-[#b83a05] dark:data-[engine=vitess]:data-[state=link]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=link]:mint-bg-transparent dark:data-[engine=vitess]:data-[state=link]:mint-text-[#ffc59b] data-[engine=postgres]:data-[state=current]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=current]:mint-bg-[#ddf2ff] data-[engine=postgres]:data-[state=current]:mint-text-[#0e3682] dark:data-[engine=postgres]:data-[state=current]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=current]:mint-bg-[#08204e] dark:data-[engine=postgres]:data-[state=current]:mint-text-[#ddf2ff] data-[engine=postgres]:data-[state=link]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=link]:mint-bg-transparent data-[engine=postgres]:data-[state=link]:mint-text-[#0b6ec5] dark:data-[engine=postgres]:data-[state=link]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=link]:mint-bg-transparent dark:data-[engine=postgres]:data-[state=link]:mint-text-[#73c7f9] data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] dark:data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] data-[engine=neki]:data-[state=link]:mint-bg-transparent data-[engine=neki]:data-[state=link]:mint-text-[#8f7200] dark:data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=link]:mint-bg-transparent dark:data-[engine=neki]:data-[state=link]:mint-text-[#fbca00] data-[engine=both]:data-[state=current]:mint-border-[#d4d4d4] data-[engine=both]:data-[state=current]:mint-bg-[#f0f0f0] data-[engine=both]:data-[state=current]:mint-text-[#3d3d3d] dark:data-[engine=both]:data-[state=current]:mint-border-[#525252] dark:data-[engine=both]:data-[state=current]:mint-bg-[#2a2a2a] dark:data-[engine=both]:data-[state=current]:mint-text-[#e5e5e5]`,children:label},engine)}return _jsxs(_components.a,{href:__snippet_docsHref_3vlljw(paths[engine]),\"data-engine\":engine,\"data-state\":`link`,title:`View ${__snippet_platformLabels_3vlljw[engine]} documentation`,className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-whitespace-nowrap mint-rounded-full mint-border mint-px-2.5 mint-py-1 mint-text-[13px] mint-font-semibold mint-leading-tight mint-no-underline data-[engine=vitess]:data-[state=current]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=current]:mint-bg-[#ffe8d8] data-[engine=vitess]:data-[state=current]:mint-text-[#672002] dark:data-[engine=vitess]:data-[state=current]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=current]:mint-bg-[#3c1403] dark:data-[engine=vitess]:data-[state=current]:mint-text-[#ffe8d8] data-[engine=vitess]:data-[state=link]:mint-border-[#ffc59b] data-[engine=vitess]:data-[state=link]:mint-bg-transparent data-[engine=vitess]:data-[state=link]:mint-text-[#b83a05] dark:data-[engine=vitess]:data-[state=link]:mint-border-[#962d00] dark:data-[engine=vitess]:data-[state=link]:mint-bg-transparent dark:data-[engine=vitess]:data-[state=link]:mint-text-[#ffc59b] data-[engine=postgres]:data-[state=current]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=current]:mint-bg-[#ddf2ff] data-[engine=postgres]:data-[state=current]:mint-text-[#0e3682] dark:data-[engine=postgres]:data-[state=current]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=current]:mint-bg-[#08204e] dark:data-[engine=postgres]:data-[state=current]:mint-text-[#ddf2ff] data-[engine=postgres]:data-[state=link]:mint-border-[#a9dffe] data-[engine=postgres]:data-[state=link]:mint-bg-transparent data-[engine=postgres]:data-[state=link]:mint-text-[#0b6ec5] dark:data-[engine=postgres]:data-[state=link]:mint-border-[#144eb6] dark:data-[engine=postgres]:data-[state=link]:mint-bg-transparent dark:data-[engine=postgres]:data-[state=link]:mint-text-[#73c7f9] data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] dark:data-[engine=neki]:data-[state=current]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-bg-[#fbca00] dark:data-[engine=neki]:data-[state=current]:mint-text-[#1a1a1a] data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] data-[engine=neki]:data-[state=link]:mint-bg-transparent data-[engine=neki]:data-[state=link]:mint-text-[#8f7200] dark:data-[engine=neki]:data-[state=link]:mint-border-[#fbca00] dark:data-[engine=neki]:data-[state=link]:mint-bg-transparent dark:data-[engine=neki]:data-[state=link]:mint-text-[#fbca00] data-[engine=both]:data-[state=current]:mint-border-[#d4d4d4] data-[engine=both]:data-[state=current]:mint-bg-[#f0f0f0] data-[engine=both]:data-[state=current]:mint-text-[#3d3d3d] dark:data-[engine=both]:data-[state=current]:mint-border-[#525252] dark:data-[engine=both]:data-[state=current]:mint-bg-[#2a2a2a] dark:data-[engine=both]:data-[state=current]:mint-text-[#e5e5e5]`,children:[label,_jsx(`svg`,{\"aria-hidden\":`true`,width:`12`,height:`12`,viewBox:`0 0 12 12`,fill:`none`,className:`mint-shrink-0`,children:_jsx(`path`,{d:`M2.5 6h7M6.5 3l3 3-3 3`,stroke:`currentColor`,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})]},engine)})})};const __snippet_PlatformAvailabilityText_3vlljw=({current,vitess,postgres,neki})=>{const _components={a:`a`,..._provideComponents()};return __snippet_combinedPlatformLabels_3vlljw[current]?_jsxs(`p`,{children:[`Available for `,__snippet_combinedPlatformLabels_3vlljw[current],`.`]}):_jsxs(_Fragment,{children:[_jsxs(`p`,{children:[`This page covers `,__snippet_platformLabels_3vlljw[current],`.`]}),vitess\u0026\u0026current!==`vitess`?_jsxs(`p`,{children:[`Vitess version: `,_jsx(_components.a,{href:vitess.startsWith(`/`)?vitess:`/`+vitess,children:__snippet_platformLabels_3vlljw.vitess})]}):null,postgres\u0026\u0026current!==`postgres`?_jsxs(`p`,{children:[`Postgres version: `,_jsx(_components.a,{href:postgres.startsWith(`/`)?postgres:`/`+postgres,children:__snippet_platformLabels_3vlljw.postgres})]}):null,neki\u0026\u0026current!==`neki`?_jsxs(`p`,{children:[`Neki version: `,_jsx(_components.a,{href:neki.startsWith(`/`)?neki:`/`+neki,children:__snippet_platformLabels_3vlljw.neki})]}):null]})};const PlatformAvailability=props=>{const{Visibility}=_provideComponents()||{};if(!Visibility)_missingMdxReference(`Visibility`,true);return _jsxs(_Fragment,{children:[_jsx(Visibility,{for:`humans`,children:_jsx(__snippet_PlatformAvailabilityBadges_3vlljw,{...props})}),_jsx(Visibility,{for:`agents`,children:_jsx(__snippet_PlatformAvailabilityText_3vlljw,{...props})})]})};function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning,_MdxComponentBoundary}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`PlatformAvailability`,children:_jsx(PlatformAvailability,{current:`vitess`})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`This page describes an upcoming change (September 1, 2026) for customers who use Python to connect to PlanetScale Vitess databases.`})}),`\n`,_jsxs(_components.p,{children:[`PlanetScale is deploying a protocol fix to Vitess that may result in timeouts in Python applications. To avoid problems, explicitly configure autocommit by adding `,_jsx(_components.code,{children:`autocommit=True`}),` or `,_jsx(_components.code,{children:`init_command=\"set autocommit=0\"`}),` to your connect arguments.`]}),`\n`,_jsx(_components.p,{children:`This change affects Python apps that connect to PlanetScale Vitess using SQLAlchemy, PyMySQL, asyncmy, or aiomysql and do not explicitly configure autocommit.`}),`\n`,_jsx(Heading,{level:`2`,id:`recommended-adjustments`,children:`Recommended adjustments`}),`\n`,_jsx(_components.p,{children:`Make one of the following adjustments so that your connections have a consistent autocommit setting before and after the Vitess change is deployed.`}),`\n`,_jsxs(Heading,{level:`3`,id:`option-a-set-autocommit=true`,children:[`Option A: Set `,_jsx(_components.code,{children:`autocommit=True`})]}),`\n`,_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`autocommit=True`}),` to your connect arguments. This is recommended if you are relying on default behavior. This setting ensures that your application continues running in the same mode after PlanetScale rolls out the Vitess change.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connection `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pymysql.connect(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`autocommit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`3`,id:`option-b-set-init_command=set-autocommit=0`,children:[`Option B: Set `,_jsx(_components.code,{children:`init_command=\"set autocommit=0\"`})]}),`\n`,_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`init_command=\"set autocommit=0\"`}),` to your connect arguments. This is recommended if your app manages all SQL queries with transactions or if it keeps connections open for less than 20 seconds.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connection `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pymysql.connect(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`init_command`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"set autocommit=0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`sqlalchemy`,children:`SQLAlchemy`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` sqlalchemy `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` create_engine`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`url `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` ...`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connect_args `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ssl\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: ssl.create_default_context(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"autocommit\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or init_command: \"set autocommit=0\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`engine `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` create_engine(url, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`connect_args`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connect_args)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`pymysql`,children:`PyMySQL`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pymysql`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connection `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` pymysql.connect(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HOST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` port`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PORT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` user`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"USERNAME\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` password`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PASSWORD\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` database`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"DATABASE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` ssl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ssl.create_default_context(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` autocommit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or init_command: \"set autocommit=0\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`asyncmy`,children:`asyncmy`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` asyncmy`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connection `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` asyncmy.connect(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HOST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` port`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PORT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` user`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"USERNAME\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` password`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PASSWORD\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` db`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"DATABASE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` ssl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ssl.create_default_context(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` autocommit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or init_command: \"set autocommit=0\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`aiomysql`,children:`aiomysql`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` aiomysql`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ssl`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`connection `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` aiomysql.connect(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` host`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HOST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` port`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PORT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` user`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"USERNAME\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` password`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PASSWORD\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` db`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`config[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"DATABASE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` ssl`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ssl.create_default_context(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` autocommit`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# or init_command: \"set autocommit=0\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`additional-context`,children:`Additional context`}),`\n`,_jsx(_components.p,{children:`PlanetScale is changing Vitess so that it reports the correct autocommit value during the initial handshake packet. Some Python MySQL drivers (PyMySQL, asyncmy, aiomysql) use that initial handshake packet to decide the connection’s autocommit behavior. Other Python MySQL drivers (mysql-connector-python, mysqlclient) and MySQL client libraries in other languages do not rely solely on the initial handshake packet and are not affected by the issue described below.`}),`\n`,_jsxs(_components.p,{children:[`Because of the current Vitess behavior, the affected Python clients create connections configured with autocommit on, which is inconsistent with their intent to have autocommit off. After PlanetScale deploys the change, apps that use the client’s default (`,_jsx(_components.code,{children:`autocommit=False`}),`) begin correctly running with autocommit off.`]}),`\n`,_jsxs(_components.p,{children:[`After the change, any clients with implicit `,_jsx(_components.code,{children:`autocommit=False`}),` intent begin to observe actual `,_jsx(_components.code,{children:`autocommit=False`}),` behavior. In this mode, statements that are outside of an explicit transaction start an implicit transaction and the implicit transaction stays open. The implicit transaction follows the same timeout rules as any other transaction, which means it times out if it is not committed or rolled back within 20 seconds.`]}),`\n`,_jsxs(_components.p,{children:[`In other words, if you run the equivalent of `,_jsx(_components.code,{children:`execute(\"SELECT 1\"); sleep 21; execute(\"SELECT 1\")`}),` today, it works. After the change, the second query returns a transaction timeout error.`]}),`\n`,_jsx(Heading,{level:`2`,id:`questions`,children:`Questions`}),`\n`,_jsxs(_components.p,{children:[`If you need guidance, `,_jsx(_components.a,{href:`https://planetscale.com/contact?initial=support`,children:`contact PlanetScale Support`}),` with your Python client library, version, and connection setup code.`]}),`\n`,_jsx(Heading,{level:`2`,id:`need-help`,children:`Need help?`}),`\n`,_jsxs(_components.p,{children:[`Get help from `,_jsx(_components.a,{href:`https://planetscale.com/contact?initial=support`,children:`the PlanetScale Support team`}),`, or join our\\xA0`,_jsx(_components.a,{href:`https://pscale.link/community`,children:`Discord community`}),` to see how others are using PlanetScale.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{__snippet_platformLabels_3vlljw,__snippet_combinedPlatformLabels_3vlljw,__snippet_platformBadgeClassName_3vlljw,__snippet_docsHref_3vlljw,__snippet_PlatformAvailabilityBadges_3vlljw,__snippet_PlatformAvailabilityText_3vlljw,PlatformAvailability,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Python autocommit handshake correction","description":"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.","sidebarTitle":"Python autocommit handshake","hidden":true,"href":"/vitess/connecting/pymysql-handshake-autocommit","hiddenSetByFrontmatter":true}}},"mdxSourceWithNoJs":null,"noJsSplices":[[166,14628,"undefined;const __snippet_combinedPlatformLabels_3vlljw=undefined;const __snippet_platformBadgeClassName_3vlljw=undefined;const __snippet_docsHref_3vlljw=()=>null;const __snippet_PlatformAvailabilityBadges_3vlljw=()=>null;const __snippet_PlatformAvailabilityText_3vlljw=()=>null;const PlatformAvailability=()=>null;funct"]]},"mdxExtracts":{"tableOfContents":[{"title":"Recommended adjustments","slug":"recommended-adjustments","depth":2,"children":[{"title":"Option A: Set autocommit=True","slug":"option-a-set-autocommit=true","depth":3,"children":[]},{"title":"Option B: Set init_command=\"set autocommit=0\"","slug":"option-b-set-init_command=set-autocommit=0","depth":3,"children":[]}]},{"title":"SQLAlchemy","slug":"sqlalchemy","depth":2,"children":[]},{"title":"PyMySQL","slug":"pymysql","depth":2,"children":[]},{"title":"asyncmy","slug":"asyncmy","depth":2,"children":[]},{"title":"aiomysql","slug":"aiomysql","depth":2,"children":[]},{"title":"Additional context","slug":"additional-context","depth":2,"children":[]},{"title":"Questions","slug":"questions","depth":2,"children":[]},{"title":"Need help?","slug":"need-help","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/planetscale-2/b155242ec3c4945e/custom.js"],"dynamicCss":".mint-mb-5 {\n margin-bottom: 1.25rem\n}\n.mint-flex {\n display: flex\n}\n.mint-inline-flex {\n display: inline-flex\n}\n.mint-shrink-0 {\n flex-shrink: 0\n}\n.mint-flex-wrap {\n flex-wrap: wrap\n}\n.mint-items-center {\n align-items: center\n}\n.mint-gap-1\\.5 {\n gap: 0.375rem\n}\n.mint-gap-2 {\n gap: 0.5rem\n}\n.mint-whitespace-nowrap {\n white-space: nowrap\n}\n.mint-rounded-full {\n border-radius: 9999px\n}\n.mint-border {\n border-width: 1px\n}\n.mint-px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem\n}\n.mint-py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem\n}\n.mint-text-\\[13px\\] {\n font-size: 13px\n}\n.mint-font-semibold {\n font-weight: 600\n}\n.mint-leading-tight {\n line-height: 1.25\n}\n.mint-no-underline {\n text-decoration-line: none\n}\n.data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#d4d4d4\\][data-state=\"current\"][data-engine=\"both\"] {\n --tw-border-opacity: 1;\n border-color: rgb(212 212 212 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#fbca00\\][data-state=\"current\"][data-engine=\"neki\"] {\n --tw-border-opacity: 1;\n border-color: rgb(251 202 0 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#fbca00\\][data-state=\"link\"][data-engine=\"neki\"] {\n --tw-border-opacity: 1;\n border-color: rgb(251 202 0 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#a9dffe\\][data-state=\"current\"][data-engine=\"postgres\"] {\n --tw-border-opacity: 1;\n border-color: rgb(169 223 254 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#a9dffe\\][data-state=\"link\"][data-engine=\"postgres\"] {\n --tw-border-opacity: 1;\n border-color: rgb(169 223 254 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#ffc59b\\][data-state=\"current\"][data-engine=\"vitess\"] {\n --tw-border-opacity: 1;\n border-color: rgb(255 197 155 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#ffc59b\\][data-state=\"link\"][data-engine=\"vitess\"] {\n --tw-border-opacity: 1;\n border-color: rgb(255 197 155 / var(--tw-border-opacity, 1))\n}\n.data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#f0f0f0\\][data-state=\"current\"][data-engine=\"both\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(240 240 240 / var(--tw-bg-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#fbca00\\][data-state=\"current\"][data-engine=\"neki\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(251 202 0 / var(--tw-bg-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"neki\"] {\n background-color: transparent\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#ddf2ff\\][data-state=\"current\"][data-engine=\"postgres\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(221 242 255 / var(--tw-bg-opacity, 1))\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"postgres\"] {\n background-color: transparent\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#ffe8d8\\][data-state=\"current\"][data-engine=\"vitess\"] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 232 216 / var(--tw-bg-opacity, 1))\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"vitess\"] {\n background-color: transparent\n}\n.data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#3d3d3d\\][data-state=\"current\"][data-engine=\"both\"] {\n --tw-text-opacity: 1;\n color: rgb(61 61 61 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#1a1a1a\\][data-state=\"current\"][data-engine=\"neki\"] {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#8f7200\\][data-state=\"link\"][data-engine=\"neki\"] {\n --tw-text-opacity: 1;\n color: rgb(143 114 0 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#0e3682\\][data-state=\"current\"][data-engine=\"postgres\"] {\n --tw-text-opacity: 1;\n color: rgb(14 54 130 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#0b6ec5\\][data-state=\"link\"][data-engine=\"postgres\"] {\n --tw-text-opacity: 1;\n color: rgb(11 110 197 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#672002\\][data-state=\"current\"][data-engine=\"vitess\"] {\n --tw-text-opacity: 1;\n color: rgb(103 32 2 / var(--tw-text-opacity, 1))\n}\n.data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#b83a05\\][data-state=\"link\"][data-engine=\"vitess\"] {\n --tw-text-opacity: 1;\n color: rgb(184 58 5 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#525252\\][data-state=\"current\"][data-engine=\"both\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(82 82 82 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#fbca00\\][data-state=\"current\"][data-engine=\"neki\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(251 202 0 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#fbca00\\][data-state=\"link\"][data-engine=\"neki\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(251 202 0 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#144eb6\\][data-state=\"current\"][data-engine=\"postgres\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(20 78 182 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#144eb6\\][data-state=\"link\"][data-engine=\"postgres\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(20 78 182 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-border-\\[\\#962d00\\][data-state=\"current\"][data-engine=\"vitess\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(150 45 0 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-border-\\[\\#962d00\\][data-state=\"link\"][data-engine=\"vitess\"]:is(.dark *) {\n --tw-border-opacity: 1;\n border-color: rgb(150 45 0 / var(--tw-border-opacity, 1))\n}\n.dark\\:data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#2a2a2a\\][data-state=\"current\"][data-engine=\"both\"]:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(42 42 42 / var(--tw-bg-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#fbca00\\][data-state=\"current\"][data-engine=\"neki\"]:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(251 202 0 / var(--tw-bg-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"neki\"]:is(.dark *) {\n background-color: transparent\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#08204e\\][data-state=\"current\"][data-engine=\"postgres\"]:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(8 32 78 / var(--tw-bg-opacity, 1))\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"postgres\"]:is(.dark *) {\n background-color: transparent\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-bg-\\[\\#3c1403\\][data-state=\"current\"][data-engine=\"vitess\"]:is(.dark *) {\n --tw-bg-opacity: 1;\n background-color: rgb(60 20 3 / var(--tw-bg-opacity, 1))\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-bg-transparent[data-state=\"link\"][data-engine=\"vitess\"]:is(.dark *) {\n background-color: transparent\n}\n.dark\\:data-\\[engine\\=both\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#e5e5e5\\][data-state=\"current\"][data-engine=\"both\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(229 229 229 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#1a1a1a\\][data-state=\"current\"][data-engine=\"neki\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=neki\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#fbca00\\][data-state=\"link\"][data-engine=\"neki\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(251 202 0 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#ddf2ff\\][data-state=\"current\"][data-engine=\"postgres\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(221 242 255 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=postgres\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#73c7f9\\][data-state=\"link\"][data-engine=\"postgres\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(115 199 249 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=current\\]\\:mint-text-\\[\\#ffe8d8\\][data-state=\"current\"][data-engine=\"vitess\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 232 216 / var(--tw-text-opacity, 1))\n}\n.dark\\:data-\\[engine\\=vitess\\]\\:data-\\[state\\=link\\]\\:mint-text-\\[\\#ffc59b\\][data-state=\"link\"][data-engine=\"vitess\"]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 197 155 / var(--tw-text-opacity, 1))\n}","subdomain":"planetscale-2","siteName":"PlanetScale","title":"Python autocommit handshake correction - PlanetScale","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T19:25:27.610Z","originalFileLocation":"vitess/connecting/pymysql-handshake-autocommit.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.\">\u003cmeta data-mint-head name=\"application-name\" content=\"PlanetScale\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Python autocommit handshake correction - PlanetScale\">\u003cmeta data-mint-head property=\"og:description\" content=\"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"PlanetScale\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://planetscale.com/docs/vitess/connecting/pymysql-handshake-autocommit\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://planetscale-2.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Python+autocommit+handshake+correction\u0026amp;description=Prepare+Python+applications+for+the+PlanetScale+Vitess+handshake+autocommit+correction+by+explicitly+configuring+autocommit+on+database+connections.\u0026amp;theme=54c065a9e2b3224f906c7f46\u0026amp;signature=4998175e9ddd28abd8e9977dc2a2133ba9bc2edd73ff542d99cf191f71210b80\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Python autocommit handshake correction - PlanetScale\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Prepare Python applications for the PlanetScale Vitess handshake autocommit correction by explicitly configuring autocommit on database connections.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://planetscale-2.mintlify.site/docs/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Python+autocommit+handshake+correction\u0026amp;description=Prepare+Python+applications+for+the+PlanetScale+Vitess+handshake+autocommit+correction+by+explicitly+configuring+autocommit+on+database+connections.\u0026amp;theme=54c065a9e2b3224f906c7f46\u0026amp;signature=4998175e9ddd28abd8e9977dc2a2133ba9bc2edd73ff542d99cf191f71210b80\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/planetscale-2/_bFyi8IG4CeLblEd/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"PlanetScale\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0e73cc\">\u003clink data-mint-head rel=\"canonical\" href=\"https://planetscale.com/docs/vitess/connecting/pymysql-handshake-autocommit\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/vitess/connecting/pymysql-handshake-autocommit.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"PlanetScale\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"PlanetScale","nav":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://planetscale.com/blog"},{"anchor":"Contact Us","icon":"headset","href":"https://planetscale.com/contact"},{"anchor":"Status","icon":"signal","href":"https://www.planetscalestatus.com/"},{"anchor":"Benchmarks","icon":"chart-line","href":"https://planetscale.com/benchmarks"}]},"tabs":[{"tab":"Platform","groups":[{"group":" ","pages":[{"title":"PlanetScale","sidebarTitle":"PlanetScale","href":""}]},{"group":"Product","pages":[{"title":"What is PlanetScale?","href":"/what-is-planetscale"},{"title":"Vitess, Neki, and Postgres","href":"/postgres-vs-vitess"},{"group":"Metal","pages":[{"title":"PlanetScale Metal","sidebarTitle":"Metal overview","href":"/metal"},{"title":"Create a Metal database","sidebarTitle":"Create or upgrade","href":"/metal/create-a-metal-database"},{"title":"PlanetScale plans","sidebarTitle":"Plans","href":"/planetscale-plans"},{"title":"How to check performance after upgrading to Metal","sidebarTitle":"Performance","href":"/metal/metal-performance"}]}]},{"group":"Connect and automate","pages":[{"group":"AI \u0026 automation","pages":[{"title":"Agents","href":"/agents"},{"title":"Grok Bot","href":"/agents/grok-bot"},{"title":"Agent setup prompt","sidebarTitle":"Agent setup prompt","href":"/agent-setup/prompt"},{"title":"AI-enhanced development","href":"/ai-tooling"},{"title":"Self-improving database","sidebarTitle":"Self-improving database","href":"/self-improving-database"}]},{"group":"MCP","pages":[{"title":"PlanetScale Model Context Protocol (MCP)","sidebarTitle":"Overview","href":"/mcp-server"},{"title":"Authenticate the MCP server with a service token","sidebarTitle":"Service tokens","href":"/mcp/service-token"}]},{"title":"Stripe Projects","href":"/connect/stripe-projects"},{"title":"Cloudflare","sidebarTitle":"Cloudflare","href":"/connect/cloudflare"},{"title":"PlanetScale Terraform provider","sidebarTitle":"Terraform provider","href":"/terraform"}]},{"group":"Plans and billing","pages":[{"title":"Billing","sidebarTitle":"Billing overview","href":"/billing"},{"title":"PlanetScale plans","sidebarTitle":"Plans","href":"/planetscale-plans"},{"group":"PlanetScale Managed","pages":[{"title":"PlanetScale Managed overview","sidebarTitle":"Overview","href":"/plans/managed"},{"group":"AWS","pages":[{"title":"PlanetScale Managed on AWS overview","sidebarTitle":"Overview","href":"/plans/managed/aws"},{"title":"Set up PlanetScale Managed in AWS","sidebarTitle":"Set up PlanetScale Managed","href":"/plans/managed/aws/getting-started"},{"title":"Set up AWS PrivateLink with PlanetScale Managed","sidebarTitle":"Set up AWS PrivateLink","href":"/plans/managed/aws/privatelink"},{"title":"Set up AWS VPC peering with PlanetScale Managed","sidebarTitle":"Set up AWS VPC peering","href":"/plans/managed/aws/vpc-peering"},{"title":"Set up AWS Reverse PrivateLink with PlanetScale Managed","sidebarTitle":"Set up AWS Reverse PrivateLink","href":"/plans/managed/aws/reverse-privatelink"},{"title":"Back up and restore in AWS","sidebarTitle":"Back up and restore","href":"/plans/managed/aws/back-up-and-restore"}]},{"group":"Azure","pages":[{"title":"PlanetScale Managed on Azure overview","sidebarTitle":"Overview","href":"/plans/managed/azure"},{"title":"Set up PlanetScale Managed in Azure","sidebarTitle":"Set up PlanetScale Managed","href":"/plans/managed/azure/getting-started"},{"title":"Set up Azure Private Link with PlanetScale Managed","sidebarTitle":"Azure Private Link","href":"/plans/managed/azure/private-link"}]},{"group":"GCP","pages":[{"title":"PlanetScale Managed on GCP overview","sidebarTitle":"Overview","href":"/plans/managed/gcp"},{"title":"Set up PlanetScale Managed in GCP","sidebarTitle":"Set up PlanetScale Managed","href":"/plans/managed/gcp/getting-started"},{"title":"Set up GCP Private Service Connect with PlanetScale Managed","sidebarTitle":"Set up GCP Private Service Connect","href":"/plans/managed/gcp/private-service-connect"},{"title":"Back up and restore in GCP","sidebarTitle":"Back up and restore","href":"/plans/managed/gcp/back-up-and-restore"}]},{"group":"Security and access","pages":[{"title":"User management","sidebarTitle":"User management","href":"/plans/managed/security-and-access/user-management"},{"title":"Cloud accounts and contents","sidebarTitle":"Cloud accounts and contents","href":"/plans/managed/security-and-access/cloud-accounts-and-contents"},{"title":"Data requests","href":"/plans/managed/security-and-access/data-requests"},{"title":"Schema snapshots","sidebarTitle":"Schema snapshots","href":"/plans/managed/security-and-access/schema-snapshots"}]},{"group":"Settings","pages":[{"title":"Maintenance schedules","sidebarTitle":"Maintenance schedules","href":"/plans/managed/maintenance-schedules"}]},{"title":"The proof of concept phase of an enterprise contract","sidebarTitle":"Proof of concept","href":"/plans/managed/proof-of-concept"}]},{"title":"Cluster sizes","sidebarTitle":"Cluster sizes","href":"/plans/planetscale-skus"},{"title":"Selecting a region","sidebarTitle":"Available regions","href":"/plans/regions"},{"title":"Deployment options","href":"/plans/deployment-options"},{"title":"PlanetScale Support","sidebarTitle":"Support plans","href":"/support"}]},{"group":"Security","pages":[{"title":"Security and compliance","sidebarTitle":"Overview","href":"/security"},{"title":"Vulnerability disclosure","href":"/security/vulnerability-disclosure"},{"title":"How PlanetScale uses AI","sidebarTitle":"How PlanetScale uses AI","href":"/how-we-use-ai"},{"group":"Account access","pages":[{"title":"Authentication methods","href":"/security/authentication-methods"},{"title":"Multi-factor authentication","href":"/security/multi-factor-authentication"},{"title":"Account password security","href":"/security/account-password-security"},{"title":"Security log","href":"/security/security-log"}]},{"group":"Organization access","pages":[{"title":"Access control","href":"/security/access-control"},{"title":"Single sign-on","href":"/security/sso"},{"title":"Audit log","href":"/security/audit-log"},{"title":"Teams","sidebarTitle":"Teams","href":"/security/teams"}]},{"group":"Database protection","pages":[{"title":"Deletion protection","sidebarTitle":"Deletion protection","href":"/security/deletion-protection"},{"title":"Require multiple administrators for deletion","sidebarTitle":"Multiple admins for deletion","href":"/security/multiple-admins-required-for-deletion"}]}]}]},{"tab":"Vitess","groups":[{"group":" ","pages":[{"title":"PlanetScale for Vitess","sidebarTitle":"Vitess","href":"/vitess"}]},{"group":"Pricing","pages":[{"title":"Pricing","href":"/vitess/pricing"}]},{"group":"Platform","pages":[{"group":"Getting Started","pages":[{"title":"PlanetScale Vitess architecture","sidebarTitle":"Vitess architecture","href":"/vitess/architecture"},{"title":"PlanetScale workflow for Vitess","sidebarTitle":"Vitess workflow","href":"/vitess/best-practices"},{"title":"PlanetScale Vitess quickstart guide","sidebarTitle":"Step-by-step guide","href":"/vitess/tutorials/planetscale-quick-start-guide"},{"title":"Cluster sizing","sidebarTitle":"Cluster sizing","href":"/plans/cluster-sizing"},{"title":"Cluster configuration","href":"/vitess/cluster-configuration"},{"title":"Disk autoscaling","href":"/vitess/cluster-configuration/disk-autoscaling"},{"title":"Cluster configuration parameters","sidebarTitle":"Parameters","href":"/vitess/cluster-configuration/parameters"},{"title":"Per-shard sizing","href":"/vitess/cluster-configuration/per-shard-sizing"},{"title":"Database replicas","sidebarTitle":"Replicas","href":"/vitess/replicas"},{"title":"Foreign key constraints","sidebarTitle":"Foreign key constraints support","href":"/vitess/foreign-key-constraints"},{"title":"Web console","sidebarTitle":"Web console","href":"/vitess/web-console"},{"title":"PlanetScale terminology","sidebarTitle":"Terminology","href":"/vitess/terminology"},{"title":"MySQL compatibility","sidebarTitle":"MySQL compatibility","href":"/vitess/mysql-compatibility"}]},{"group":"Imports","pages":[{"title":"Discovery Tool","sidebarTitle":"Discovery tool","href":"/vitess/imports/discovery-tool"},{"title":"What are workflows?","sidebarTitle":"Workflows","href":"/vitess/scaling/workflows"},{"group":"Database imports","pages":[{"title":"Database imports","href":"/vitess/imports/database-imports"},{"title":"Import public IP addresses","href":"/vitess/imports/import-tool-migration-addresses"},{"title":"Import user permissions","href":"/vitess/imports/import-tool-user-requirements"},{"title":"Import troubleshooting","href":"/vitess/imports/import-troubleshooting"}]},{"group":"MySQL to PlanetScale Vitess migration","pages":[{"title":"Amazon Aurora migration guide","sidebarTitle":"Amazon Aurora","href":"/vitess/imports/amazon-aurora-migration-guide"},{"title":"AWS RDS migration guide","sidebarTitle":"Amazon RDS","href":"/vitess/imports/aws-rds-migration-guide"},{"title":"Azure Database for MySQL migration guide","sidebarTitle":"Azure","href":"/vitess/imports/azure-database-for-mysql-migration-guide"},{"title":"DigitalOcean database migration guide","sidebarTitle":"DigitalOcean","href":"/vitess/imports/digitalocean-database-migration-guide"},{"title":"GCP Cloud SQL Migration Guide","sidebarTitle":"GCP Cloud SQL","href":"/vitess/imports/gcp-cloudsql-migration-guide"},{"title":"MariaDB migration guide","sidebarTitle":"MariaDB","href":"/vitess/imports/mariadb-migration-guide"}]},{"group":"Postgres to PlanetScale Vitess migration","pages":[{"title":"Postgres to Vitess imports","sidebarTitle":"Postgres to Vitess overview","href":"/vitess/imports/postgres"},{"title":"Postgres to PlanetScale for Vitess migration guide","sidebarTitle":"Postgres to Vitess directly","href":"/vitess/imports/postgres-planetscale-migration-guide"},{"title":"Postgres to MySQL to PlanetScale migration guide","sidebarTitle":"Postgres to Vitess with intermediate MySQL","href":"/vitess/imports/postgres-mysql-planetscale-migration-guide"}]}]},{"group":"Connecting","pages":[{"title":"Connect any application to PlanetScale","sidebarTitle":"Connect any app","href":"/vitess/tutorials/connect-any-application"},{"title":"Connect a MySQL GUI to PlanetScale","sidebarTitle":"Connect a MySQL GUI","href":"/vitess/tutorials/connect-mysql-gui"},{"title":"Connection strings","href":"/vitess/connecting/connection-strings"},{"title":"Network latency","href":"/vitess/connecting/network-latency"},{"group":"MCP","pages":[{"title":"PlanetScale Model Context Protocol (MCP)","sidebarTitle":"Overview","href":"/mcp-server"},{"title":"Authenticate the MCP server with a service token","sidebarTitle":"Service tokens","href":"/mcp/service-token"}]},{"title":"Self-improving database","sidebarTitle":"Self-improving database","href":"/self-improving-database"},{"title":"PlanetScale Terraform provider","sidebarTitle":"Terraform provider","href":"/terraform"},{"group":"Private connections","pages":[{"title":"Connecting to PlanetScale privately on AWS","sidebarTitle":"AWS PrivateLink","href":"/vitess/connecting/private-connections"},{"title":"Connecting to PlanetScale privately on GCP","sidebarTitle":"GCP Private Service Connect","href":"/vitess/connecting/private-connections-gcp"}]}]},{"group":"Schema changes","pages":[{"title":"Non-blocking schema changes","href":"/vitess/schema-changes"},{"title":"Safe migrations","href":"/vitess/schema-changes/safe-migrations"},{"group":"Branching","pages":[{"title":"Branching","sidebarTitle":"Using branches","href":"/vitess/schema-changes/branching"},{"title":"Data Branching®","href":"/vitess/schema-changes/data-branching"}]},{"group":"Deploy requests","pages":[{"title":"Deploy requests","sidebarTitle":"Using deploy requests","href":"/vitess/schema-changes/deploy-requests"},{"title":"Throttling deploy requests","href":"/vitess/schema-changes/throttling-deploy-requests"},{"title":"Aggressive deploy request cutover","sidebarTitle":"Aggressive cutover","href":"/vitess/schema-changes/aggressive-cutover"},{"title":"Long-running transactions","sidebarTitle":"Long-running transactions","href":"/vitess/schema-changes/long-running-transactions"},{"title":"Column cannot be null","sidebarTitle":"Column cannot be null","href":"/vitess/schema-changes/column-cannot-be-null"},{"title":"Column has no default value","sidebarTitle":"Column has no default value","href":"/vitess/schema-changes/column-has-no-default"},{"title":"Duplicate entry for unique key","sidebarTitle":"Duplicate entry","href":"/vitess/schema-changes/duplicate-entry"},{"title":"Value does not fit the new column","sidebarTitle":"Value does not fit column","href":"/vitess/schema-changes/value-does-not-fit-column"},{"title":"Constraint not found","sidebarTitle":"Constraint not found","href":"/vitess/schema-changes/constraint-not-found"},{"title":"Foreign key missing unique key","sidebarTitle":"Foreign key missing unique key","href":"/vitess/schema-changes/foreign-key-missing-unique-key"},{"title":"Earlier migration failed","sidebarTitle":"Earlier migration failed","href":"/vitess/schema-changes/earlier-migration-failed"}]},{"group":"Schema lint errors","pages":[{"title":"Schema lint errors","sidebarTitle":"Schema lint errors","href":"/vitess/schema-changes/schema-lint-errors"},{"title":"UNSPECIFIED schema lint error","sidebarTitle":"UNSPECIFIED","href":"/vitess/schema-changes/schema-lint-errors/unspecified"},{"title":"NO_UNIQUE_KEY schema lint error","sidebarTitle":"NO_UNIQUE_KEY","href":"/vitess/schema-changes/schema-lint-errors/no-unique-key"},{"title":"FOREIGN_KEYS_DISALLOWED schema lint error","sidebarTitle":"FOREIGN_KEYS_DISALLOWED","href":"/vitess/schema-changes/schema-lint-errors/foreign-keys-disallowed"},{"title":"INVALID_CHARSET schema lint error","sidebarTitle":"INVALID_CHARSET","href":"/vitess/schema-changes/schema-lint-errors/invalid-charset"},{"title":"UNSUPPORTED_FEATURE schema lint error","sidebarTitle":"UNSUPPORTED_FEATURE","href":"/vitess/schema-changes/schema-lint-errors/unsupported-feature"},{"title":"UNSUPPORTED_SHARDED_FEATURE schema lint error","sidebarTitle":"UNSUPPORTED_SHARDED_FEATURE","href":"/vitess/schema-changes/schema-lint-errors/unsupported-sharded-feature"},{"title":"INVALID_VSCHEMA schema lint error","sidebarTitle":"INVALID_VSCHEMA","href":"/vitess/schema-changes/schema-lint-errors/invalid-vschema"},{"title":"DUPLICATE_ENUM_VALUE schema lint error","sidebarTitle":"DUPLICATE_ENUM_VALUE","href":"/vitess/schema-changes/schema-lint-errors/duplicate-enum-value"},{"title":"UNSUPPORTED_PARTITIONING_FEATURE schema lint error","sidebarTitle":"UNSUPPORTED_PARTITIONING_FEATURE","href":"/vitess/schema-changes/schema-lint-errors/unsupported-partitioning-feature"},{"title":"INVALID_TABLE_REFERENCED_IN_VIEW schema lint error","sidebarTitle":"INVALID_TABLE_REFERENCED_IN_VIEW","href":"/vitess/schema-changes/schema-lint-errors/invalid-table-referenced-in-view"},{"title":"INVALID_COLUMN_REFERENCED_IN_VIEW schema lint error","sidebarTitle":"INVALID_COLUMN_REFERENCED_IN_VIEW","href":"/vitess/schema-changes/schema-lint-errors/invalid-column-referenced-in-view"},{"title":"BLOB_IN_UNIQUE_KEY schema lint error","sidebarTitle":"BLOB_IN_UNIQUE_KEY","href":"/vitess/schema-changes/schema-lint-errors/blob-in-unique-key"},{"title":"PARTIAL_KEY_IN_UNIQUE_KEY schema lint error","sidebarTitle":"PARTIAL_KEY_IN_UNIQUE_KEY","href":"/vitess/schema-changes/schema-lint-errors/partial-key-in-unique-key"},{"title":"FOREIGN_KEYS_CIRCULAR_DEPENDENCY schema lint error","sidebarTitle":"FOREIGN_KEYS_CIRCULAR_DEPENDENCY","href":"/vitess/schema-changes/schema-lint-errors/foreign-keys-circular-dependency"},{"title":"FOREIGN_KEYS_NONEXISTENT_TABLE schema lint error","sidebarTitle":"FOREIGN_KEYS_NONEXISTENT_TABLE","href":"/vitess/schema-changes/schema-lint-errors/foreign-keys-nonexistent-table"},{"title":"FOREIGN_KEYS_REFERENCED_VIEW schema lint error","sidebarTitle":"FOREIGN_KEYS_REFERENCED_VIEW","href":"/vitess/schema-changes/schema-lint-errors/foreign-keys-referenced-view"},{"title":"FOREIGN_KEYS_UNRESOLVED schema lint error","sidebarTitle":"FOREIGN_KEYS_UNRESOLVED","href":"/vitess/schema-changes/schema-lint-errors/foreign-keys-unresolved"},{"title":"INVALID_ROUTING_RULES schema lint error","sidebarTitle":"INVALID_ROUTING_RULES","href":"/vitess/schema-changes/schema-lint-errors/invalid-routing-rules"}]},{"group":"Schema changes","pages":[{"title":"How to make different types of schema changes","href":"/vitess/schema-changes/how-to-make-different-types-of-schema-changes"},{"title":"PlanetScale GitHub Actions","sidebarTitle":"Automating with GitHub Actions","href":"/vitess/integrations/github-actions"},{"title":"Handling table and column renames","href":"/vitess/schema-changes/handling-table-and-column-renames"},{"title":"Online DDL change unique keys","sidebarTitle":"Changing primary and unique keys","href":"/vitess/schema-changes/onlineddl-change-unique-keys"}]}]},{"group":"Monitoring","pages":[{"group":"PlanetScale Insights","pages":[{"title":"Query Insights","href":"/vitess/monitoring/query-insights"},{"title":"Inspect live Vitess connections","sidebarTitle":"Connections","href":"/vitess/monitoring/connections"},{"title":"Tags","href":"/vitess/monitoring/query-tags"},{"title":"Anomalies","sidebarTitle":"Anomalies","href":"/vitess/monitoring/anomalies"},{"title":"Errors","sidebarTitle":"Errors","href":"/vitess/monitoring/errors"},{"title":"Schema recommendations","sidebarTitle":"Schema recommendations","href":"/vitess/monitoring/schema-recommendations"}]},{"group":"Prometheus","pages":[{"title":"Prometheus","sidebarTitle":"Connecting Prometheus","href":"/vitess/integrations/prometheus"},{"title":"Grafana Dashboard for PlanetScale Branches","sidebarTitle":"Visualizing in Grafana","href":"/vitess/tutorials/prometheus-metrics-grafana"},{"title":"Sending Prometheus Metrics to Datadog","sidebarTitle":"Collecting in the Datadog Agent","href":"/vitess/tutorials/prometheus-metrics-datadog"},{"title":"Sending Prometheus Metrics to New Relic","sidebarTitle":"Forwarding metrics to New Relic","href":"/vitess/tutorials/prometheus-metrics-newrelic"},{"title":"Prometheus metrics","sidebarTitle":"Metrics List","href":"/vitess/integrations/prometheus-metrics"}]},{"group":"Integrations","pages":[{"title":"Datadog integration","sidebarTitle":"Datadog (legacy)","href":"/vitess/integrations/datadog"}]},{"group":"Database auditing","pages":[{"title":"Audit log","href":"/vitess/audit-log"}]}]},{"group":"Backups","pages":[{"title":"Back up and restore","href":"/vitess/backups"}]},{"group":"Scaling","pages":[{"title":"Cluster sizing","sidebarTitle":"Cluster sizing","href":"/vitess/scaling/cluster-sizing"},{"title":"Cluster configuration","href":"/vitess/scaling/cluster-configuration"},{"title":"Per-shard sizing","href":"/vitess/cluster-configuration/per-shard-sizing"},{"title":"Database replicas","sidebarTitle":"Replicas","href":"/vitess/scaling/replicas"},{"title":"Read-only regions","href":"/vitess/scaling/read-only-regions"},{"title":"Vitess system limits","href":"/vitess/scaling/planetscale-system-limits"},{"title":"VTGates","href":"/vitess/scaling/vtgates"},{"title":"Deleting a database","sidebarTitle":"Deleting a database","href":"/vitess/delete-a-database"}]},{"group":"Sharding","pages":[{"group":"Overview","pages":[{"title":"Sharding with PlanetScale","href":"/vitess/sharding"},{"title":"What are workflows?","sidebarTitle":"Workflows","href":"/vitess/scaling/workflows"}]},{"group":"Guides","pages":[{"title":"Shard existing tables with MoveTables","sidebarTitle":"Sharding quickstart","href":"/vitess/sharding/sharding-quickstart"},{"title":"Change the number of shards with MoveTables","sidebarTitle":"Modifying the number of shards","href":"/vitess/sharding/sharding-a-sharded-keyspace"},{"title":"Sharding new tables","sidebarTitle":"Sharding new tables","href":"/vitess/sharding/sharding-new-tables"},{"title":"Avoiding cross-shard queries","href":"/vitess/sharding/avoiding-cross-shard-queries"},{"title":"Targeting the correct keyspace","sidebarTitle":"Keyspace targeting for ORMs and frameworks","href":"/vitess/sharding/targeting-correct-keyspace"},{"title":"Sequence Tables","sidebarTitle":"Creating sequence tables","href":"/vitess/sharding/sequence-tables"},{"title":"Pre-sharding checklist","sidebarTitle":"Pre-sharding checklist","href":"/vitess/sharding/pre-sharding-checklist"}]},{"group":"Concepts","pages":[{"title":"VSchema","sidebarTitle":"VSchema","href":"/vitess/sharding/vschema"},{"title":"ALTER VSCHEMA syntax reference","sidebarTitle":"ALTER VSCHEMA syntax","href":"/vitess/sharding/alter-vschema"},{"title":"Vindexes","sidebarTitle":"Vindexes","href":"/vitess/sharding/vindexes"},{"title":"What is a keyspace","sidebarTitle":"Keyspace","href":"/vitess/sharding/keyspaces"},{"title":"Sharding workflow state reference","sidebarTitle":"Sharding workflow state reference","href":"/vitess/sharding/sharding-workflow-state-reference"}]}]},{"group":"Vectors","pages":[{"title":"Vector search and storage","sidebarTitle":"Vectors overview","href":"/vitess/vectors"},{"title":"Vector database terminology and concepts","sidebarTitle":"Concepts and terminology","href":"/vitess/vectors/terminology-and-concepts"},{"title":"Common use cases for Vector search","sidebarTitle":"Use cases","href":"/vitess/vectors/use-cases"},{"title":"Vectors with an ORM","sidebarTitle":"Using with an ORM","href":"/vitess/vectors/using-with-an-orm"},{"title":"Vector type and index reference","sidebarTitle":"Reference","href":"/vitess/vectors/reference"}]},{"group":"Security","pages":[{"title":"Security and compliance","sidebarTitle":"Overview","href":"/security"},{"title":"Vulnerability disclosure","href":"/security/vulnerability-disclosure"},{"group":"Database security","pages":[{"title":"Connection strings","href":"/vitess/security/connection-strings"},{"title":"Connecting to PlanetScale securely","sidebarTitle":"Secure connections","href":"/vitess/connecting/secure-connections"},{"title":"Password roles","href":"/vitess/security/password-roles"}]},{"group":"Account access","pages":[{"title":"Authentication methods","href":"/security/authentication-methods"},{"title":"Multi-factor authentication","href":"/security/multi-factor-authentication"},{"title":"Account password security","href":"/security/account-password-security"},{"title":"Security log","href":"/security/security-log"}]},{"group":"Organization access","pages":[{"title":"Access control","href":"/security/access-control"},{"title":"Audit log","href":"/security/audit-log"},{"title":"Teams","sidebarTitle":"Teams","href":"/security/teams"},{"title":"Single sign-on","href":"/security/sso"}]},{"group":"Database protection","pages":[{"title":"Deletion protection","sidebarTitle":"Deletion protection","href":"/security/deletion-protection"},{"title":"Require multiple administrators for deletion","sidebarTitle":"Multiple admins for deletion","href":"/security/multiple-admins-required-for-deletion"}]}]},{"group":"Troubleshooting","pages":[{"title":"MySQL compatibility","sidebarTitle":"MySQL compatibility","href":"/vitess/troubleshooting/mysql-compatibility"},{"title":"Vitess system limits","href":"/vitess/troubleshooting/planetscale-system-limits"},{"title":"PlanetScale database error reference","sidebarTitle":"Errors reference","href":"/vitess/troubleshooting/errors"},{"title":"Out of memory (OOM)","href":"/vitess/troubleshooting/out-of-memory"}]}]},{"group":"Integrations","pages":[{"group":"Development","pages":[{"title":"Cloudflare Workers database integration","sidebarTitle":"Cloudflare Workers","href":"/vitess/integrations/cloudflare-workers"},{"title":"Netlify","url":"https://docs.netlify.com/extend/install-and-use/setup-guides/planetscale-integration/","href":"/vitess/integrations/netlify"},{"title":"Deploy to Vercel","sidebarTitle":"Vercel","href":"/vitess/tutorials/deploy-to-vercel"},{"title":"AWS Lambda connection strings","sidebarTitle":"AWS Lambda","href":"/vitess/tutorials/aws-lambda-connection-strings"}]},{"group":"ETL","pages":[{"title":"PlanetScale Connect","sidebarTitle":"Overview","href":"/vitess/etl"},{"title":"Airbyte integration","sidebarTitle":"Airbyte","href":"/vitess/integrations/airbyte"},{"title":"Artie integration","sidebarTitle":"Artie","href":"/vitess/integrations/artie"},{"title":"Fivetran integration","sidebarTitle":"Fivetran","href":"/vitess/integrations/fivetran"},{"title":"Hightouch integration","sidebarTitle":"Hightouch","href":"/vitess/integrations/hightouch"},{"title":"Stitch integration","sidebarTitle":"Stitch","href":"/vitess/integrations/stitch"},{"group":"Debezium","pages":[{"title":"Debezium connector for PlanetScale","sidebarTitle":"Debezium","href":"/vitess/integrations/debezium"},{"title":"Debezium connector on Confluent Cloud","sidebarTitle":"Confluent Cloud","href":"/vitess/integrations/debezium-confluent"}]}]},{"group":"Monitoring","pages":[{"title":"Prometheus","sidebarTitle":"Prometheus","href":"/vitess/tutorials/prometheus"},{"title":"Grafana Dashboard for PlanetScale Branches","sidebarTitle":"Grafana","href":"/vitess/monitoring/prometheus-metrics-grafana"},{"title":"Sending Prometheus Metrics to Datadog","sidebarTitle":"Datadog Agent","href":"/vitess/monitoring/prometheus-metrics-datadog"},{"title":"Sending Prometheus Metrics to New Relic","sidebarTitle":"New Relic","href":"/vitess/monitoring/prometheus-metrics-newrelic"},{"title":"Datadog integration","sidebarTitle":"Datadog (legacy)","href":"/vitess/monitoring/datadog"}]},{"group":"Billing","pages":[{"title":"Vantage integration","sidebarTitle":"Vantage","href":"/vitess/integrations/vantage"}]}]},{"group":"Guides","pages":[{"group":"Frameworks and ORMs","pages":[{"title":"Connect a Django application to PlanetScale","sidebarTitle":"Django","href":"/vitess/tutorials/connect-django-app"},{"group":"Golang","pages":[{"title":"Connect a Go application to PlanetScale","sidebarTitle":"Go quickstart","href":"/vitess/tutorials/connect-go-app"},{"title":"Connect a Go application using GORM to PlanetScale","sidebarTitle":"Gorm","href":"/vitess/tutorials/connect-go-gorm-app"}]},{"group":"Next.js","pages":[{"title":"Connect a Next.js application to PlanetScale","sidebarTitle":"Next.js quickstart","href":"/vitess/tutorials/connect-nextjs-app"},{"title":"Next.js and PlanetScale Netlify template tutorial","sidebarTitle":"Next.js and Netlify template","href":"/vitess/tutorials/nextjs-planetscale-netlify-template"},{"title":"Deploy to Vercel","sidebarTitle":"Deploy to Vercel","href":"/vitess/tutorials/nextjs-deploy-to-vercel"},{"title":"Deploy to Netlify","sidebarTitle":"Deploy to Netlify","href":"/vitess/tutorials/deploy-to-netlify"}]},{"title":"Connect a Node.js application to PlanetScale","sidebarTitle":"Node.js","href":"/vitess/tutorials/connect-nodejs-app"},{"group":"PHP","pages":[{"title":"Connect a PHP application to PlanetScale","sidebarTitle":"PHP quickstart","href":"/vitess/tutorials/connect-php-app"},{"title":"Connect a Laravel application to PlanetScale","sidebarTitle":"Laravel quickstart","href":"/vitess/tutorials/connect-laravel-app"},{"title":"Connect a Symfony application to PlanetScale","sidebarTitle":"Symfony quickstart","href":"/vitess/tutorials/connect-symfony-app"}]},{"group":"Prisma","pages":[{"title":"Using PlanetScale with Prisma","sidebarTitle":"Prisma guide","href":"/vitess/tutorials/using-planetscale-with-prisma"},{"title":"Automatic Prisma migrations","sidebarTitle":"Automatic Prisma migrations","href":"/vitess/tutorials/automatic-prisma-migrations"},{"title":"Using the PlanetScale serverless driver with Prisma","sidebarTitle":"Serverless driver with Prisma","href":"/vitess/tutorials/planetscale-serverless-driver-prisma-example"},{"title":"Prisma best practices","href":"/vitess/tutorials/prisma-best-practices"}]},{"group":"Ruby on Rails","pages":[{"title":"Connect a Rails application to PlanetScale","sidebarTitle":"Ruby on Rails quickstart","href":"/vitess/tutorials/connect-rails-app"},{"title":"Automatic Rails migrations","sidebarTitle":"Automatic Rails migrations","href":"/vitess/tutorials/automatic-rails-migrations"}]}]},{"group":"Deployments","pages":[{"title":"Deploy to Netlify","sidebarTitle":"Deploy to Netlify","href":"/vitess/tutorials/deployments/deploy-to-netlify"},{"title":"Deploy to Vercel","href":"/vitess/tutorials/deployments/deploy-to-vercel"},{"title":"Next.js and PlanetScale Netlify template tutorial","sidebarTitle":"Next.js and Netlify template","href":"/vitess/tutorials/deployments/nextjs-planetscale-netlify-template"},{"title":"Deploy a Django app to Heroku","href":"/vitess/tutorials/deploy-a-django-app-to-heroku"}]},{"group":"Monitoring","pages":[{"title":"Grafana Dashboard for PlanetScale Branches","sidebarTitle":"Visualizing in Grafana","href":"/vitess/guides/prometheus-metrics-grafana"},{"title":"Sending Prometheus Metrics to Datadog","sidebarTitle":"Sending Prometheus Metrics to Datadog","href":"/vitess/guides/prometheus-metrics-datadog"},{"title":"Sending Prometheus Metrics to New Relic","sidebarTitle":"Sending Prometheus Metrics to New Relic","href":"/vitess/guides/prometheus-metrics-newrelic"}]},{"group":"Serverless JavaScript driver","pages":[{"title":"PlanetScale serverless driver for JavaScript","sidebarTitle":"Using the serverless driver","href":"/vitess/tutorials/planetscale-serverless-driver"},{"title":"Node.js example using the PlanetScale serverless driver","sidebarTitle":"Node.js example","href":"/vitess/tutorials/planetscale-serverless-driver-node-example"},{"title":"Using the PlanetScale serverless driver with Prisma","sidebarTitle":"Prisma example","href":"/vitess/tutorials/prisma-example"}]},{"group":"MySQL","pages":[{"title":"Operating without foreign key constraints","sidebarTitle":"Operating without foreign key constraints","href":"/vitess/operating-without-foreign-key-constraints"},{"title":"How to make different types of schema changes","sidebarTitle":"Performing different types of schema changes","href":"/vitess/how-to-make-different-types-of-schema-changes"},{"title":"How Online Schema Change tools work","sidebarTitle":"How online schema change tools work","href":"/vitess/schema-changes/how-online-schema-change-tools-work"},{"title":"Online DDL change unique keys","sidebarTitle":"OnlineDDL","href":"/vitess/onlineddl-change-unique-keys"},{"title":"Strategies for maintaining referential integrity","sidebarTitle":"Changing unique keys","href":"/vitess/strategies-for-maintaining-referential-integrity"},{"title":"Handling table and column renames","sidebarTitle":"Renaming columns and tables","href":"/vitess/handling-table-and-column-renames"},{"title":"Comparison of Online Schema Change tools","sidebarTitle":"Online schema change tool comparison","href":"/vitess/schema-changes/online-schema-change-tools-comparison"}]}]}]},{"tab":"Neki","groups":[{"group":" ","pages":[{"title":"Neki","href":"/neki"}]},{"group":"Architecture","pages":[{"group":"Foundations","pages":[{"title":"PlanetScale Neki overview","sidebarTitle":"Overview","href":"/neki/overview"},{"title":"When to shard","href":"/neki/when-to-shard"},{"title":"Neki vs PlanetScale Postgres","href":"/neki/coming-from-postgres"},{"title":"Neki vs Vitess","href":"/neki/vitess-and-postgres"}]},{"group":"Core concepts","pages":[{"title":"Data topology","href":"/neki/data-topology"},{"title":"Query planning","href":"/neki/query-planning"},{"title":"Shard targeting and fanout","href":"/neki/shard-targeting-fanout"},{"title":"Transactions","href":"/neki/transactions"},{"title":"Reference tables and GSIs","href":"/neki/reference-tables-and-gsis"},{"title":"Replicator workflows","sidebarTitle":"Replicator","href":"/neki/replication"}]},{"group":"Workflows","pages":[{"title":"Data migration","href":"/neki/data-migration"},{"title":"Schema changes","href":"/neki/schema-changes"}]},{"group":"Reference","pages":[{"title":"Platform preview limitations","href":"/neki/platform-preview-limitations"},{"title":"Neki terminology","sidebarTitle":"Terminology","href":"/neki/terminology"},{"title":"Neki error codes","sidebarTitle":"Error codes","href":"/neki/error-codes"},{"title":"Error hints and details","sidebarTitle":"Hints and details","href":"/neki/error-hints-and-details"},{"title":"EXPLAIN output reference","sidebarTitle":"EXPLAIN output","href":"/neki/explain-reference"},{"title":"Example schema","href":"/neki/example-schema"}]}]},{"group":"Pricing","pages":[{"title":"Neki pricing","sidebarTitle":"Pricing","href":"/neki/pricing"}]},{"group":"Platform","pages":[{"group":"Getting started","pages":[{"title":"Neki database dashboard","sidebarTitle":"Dashboard overview","href":"/neki/neki-dashboard"},{"title":"PlanetScale Neki quickstart","sidebarTitle":"Neki quickstart","href":"/neki/tutorials/planetscale-quick-start-guide"},{"title":"PlanetScale Neki sharding quickstart","sidebarTitle":"Sharding quickstart","href":"/neki/tutorials/sharding-quick-start-guide"},{"title":"Neki best practices","sidebarTitle":"Best practices","href":"/neki/best-practices"}]},{"group":"Connecting","pages":[{"title":"Connect to Neki","sidebarTitle":"Overview","href":"/neki/connecting"},{"title":"Roles and credentials","href":"/neki/connecting/roles"},{"title":"PlanetScale Terraform provider","sidebarTitle":"Terraform provider","href":"/terraform"},{"group":"Private connections","pages":[{"title":"Connect privately with AWS PrivateLink","sidebarTitle":"AWS PrivateLink","href":"/neki/connecting/private-connections/aws-privatelink"},{"title":"Connect privately with GCP Private Service Connect","sidebarTitle":"GCP Private Service Connect","href":"/neki/connecting/private-connections/gcp-private-service-connect"}]},{"title":"Web console","href":"/neki/web-console"}]},{"group":"Configuration","pages":[{"title":"Cluster sizing","href":"/neki/cluster-configuration/cluster-sizing"},{"title":"Cluster configuration","href":"/neki/cluster-configuration"},{"title":"Configure Neki maintenance windows","sidebarTitle":"Maintenance windows","href":"/neki/cluster-configuration/maintenance-windows"},{"title":"Configuration parameters","sidebarTitle":"Parameters","href":"/neki/cluster-configuration/parameters"},{"title":"Database replicas","sidebarTitle":"Replicas","href":"/neki/replicas"},{"title":"Read-only replicas","sidebarTitle":"Read-only replicas","href":"/neki/read-only-replicas"}]},{"title":"Postgres extensions","sidebarTitle":"Extensions","href":"/neki/extensions"},{"group":"Migrate to Neki","pages":[{"title":"Import a Postgres database","sidebarTitle":"Import Postgres","href":"/neki/imports/postgres"},{"title":"Troubleshoot a Neki migration","sidebarTitle":"Migration troubleshooting","href":"/neki/imports/troubleshooting"}]},{"group":"Branching","pages":[{"title":"Branching","href":"/neki/branching"},{"title":"Development environments","href":"/neki/development-environments"}]},{"group":"Monitoring","pages":[{"title":"Monitor a Neki database","sidebarTitle":"Monitoring overview","href":"/neki/monitoring"},{"title":"Query Insights","href":"/neki/monitoring/query-insights"},{"title":"Anomalies","href":"/neki/monitoring/anomalies"},{"title":"Schema recommendations","href":"/neki/monitoring/schema-recommendations"},{"title":"Metrics","href":"/neki/monitoring/metrics"},{"title":"Logs","href":"/neki/monitoring/logs"},{"title":"Inspect live Neki connections","sidebarTitle":"Connections","href":"/neki/monitoring/connections"},{"title":"Prometheus metrics for PlanetScale Neki","sidebarTitle":"Prometheus metrics reference","href":"/neki/monitoring/prometheus-metrics-neki"}]},{"title":"Back up and restore","sidebarTitle":"Backups","href":"/neki/backups"}]},{"group":"Guides","pages":[{"group":"Frameworks and ORMs","pages":[{"title":"Connect a Node.js application to Neki","sidebarTitle":"Node.js","href":"/neki/guides/node"},{"title":"Connect Drizzle to Neki","sidebarTitle":"Drizzle","href":"/neki/guides/drizzle"},{"title":"Connect Kysely to Neki","sidebarTitle":"Kysely","href":"/neki/guides/kysely"},{"title":"Connect Prisma to Neki","sidebarTitle":"Prisma","href":"/neki/guides/prisma"},{"title":"Connect a Ruby on Rails application to Neki","sidebarTitle":"Ruby on Rails","href":"/neki/guides/rails"},{"title":"Connect a Django application to Neki","sidebarTitle":"Django","href":"/neki/guides/django"},{"title":"Connect a Laravel application to Neki","sidebarTitle":"Laravel","href":"/neki/guides/laravel"},{"title":"Connect a Bun application to Neki","sidebarTitle":"Bun","href":"/neki/guides/bun"},{"title":"Connect Cloudflare Workers to Neki","sidebarTitle":"Cloudflare Workers","href":"/neki/guides/cloudflare-workers"}]}]}]},{"tab":"Postgres","groups":[{"group":"Onboarding","pages":[{"title":"PlanetScale Postgres","sidebarTitle":"Welcome","href":"/postgres"},{"group":"Getting started","pages":[{"title":"PlanetScale Postgres quickstart","sidebarTitle":"Quickstart","href":"/postgres/tutorials/planetscale-postgres-quickstart"},{"title":"Day one with PlanetScale Postgres","sidebarTitle":"Next steps","href":"/postgres/day-one-with-planetscale-postgres"},{"title":"PlanetScale Postgres database dashboard","sidebarTitle":"Dashboard overview","href":"/postgres/dashboard"},{"title":"Web console","sidebarTitle":"Web console","href":"/postgres/web-console"},{"title":"PlanetScale Postgres architecture","sidebarTitle":"Postgres architecture","href":"/postgres/postgres-architecture"},{"title":"Postgres compatibility","href":"/postgres/postgres-compatibility"},{"title":"PlanetScale Postgres operations philosophy","sidebarTitle":"Operations philosophy","href":"/postgres/operations-philosophy"},{"title":"Connection resilience guide","sidebarTitle":"Connection resilience","href":"/postgres/connection-resilience"}]}]},{"group":"Platform","pages":[{"title":"PlanetScale Postgres pricing","sidebarTitle":"Pricing","href":"/postgres/pricing"},{"group":"Configuration","pages":[{"title":"Cluster configuration","sidebarTitle":"Cluster configuration","href":"/postgres/cluster-configuration"},{"title":"CPU Architectures","sidebarTitle":"CPU architecture","href":"/postgres/cluster-configuration/cpu-architectures"},{"title":"Cluster storage configuration","sidebarTitle":"Disk Storage","href":"/postgres/cluster-configuration/cluster-storage"},{"title":"Configure Postgres maintenance windows","sidebarTitle":"Maintenance windows","href":"/postgres/cluster-configuration/maintenance-windows"},{"title":"Cluster configuration parameters","sidebarTitle":"Parameters","href":"/postgres/cluster-configuration/parameters"},{"title":"Disk autoscaling","href":"/postgres/cluster-configuration/disk-autoscaling"},{"title":"Single node","href":"/postgres/cluster-configuration/single-node"},{"title":"Supported versions","sidebarTitle":"Versions","href":"/postgres/cluster-configuration/versions"},{"title":"Cluster updates","href":"/postgres/cluster-configuration/updates"},{"title":"Settings","sidebarTitle":"Database settings","href":"/postgres/settings"}]},{"group":"Extensions","pages":[{"title":"Extensions","sidebarTitle":"Overview","href":"/postgres/extensions"},{"title":"Extensions: auto_explain","sidebarTitle":"auto_explain","href":"/postgres/extensions/auto_explain"},{"title":"Extensions: pg_cron","sidebarTitle":"pg_cron","href":"/postgres/extensions/pg_cron"},{"title":"Extensions: pg_hint_plan","sidebarTitle":"pg_hint_plan","href":"/postgres/extensions/pg_hint_plan"},{"title":"Extensions: pg_partman_bgw","sidebarTitle":"pg_partman_bgw","href":"/postgres/extensions/pg_partman_bgw"},{"title":"Extensions: pg_squeeze","sidebarTitle":"pg_squeeze","href":"/postgres/extensions/pg_squeeze"},{"title":"Extensions: pg_stat_statements","sidebarTitle":"pg_stat_statements","href":"/postgres/extensions/pg_stat_statements"},{"title":"Extensions: pg_strict","sidebarTitle":"pg_strict","href":"/postgres/extensions/pg_strict"},{"title":"Extensions: pginsights","sidebarTitle":"pginsights","href":"/postgres/extensions/pginsights"},{"title":"Extensions: pg_duckdb","sidebarTitle":"pg_duckdb","href":"/postgres/extensions/pg_duckdb"},{"title":"Extensions: pgvector","sidebarTitle":"pgvector","href":"/postgres/extensions/pgvector"},{"title":"Extensions: TimescaleDB","sidebarTitle":"TimescaleDB","href":"/postgres/extensions/timescaledb"}]},{"group":"Connecting","pages":[{"title":"Connections overview","sidebarTitle":"Overview","href":"/postgres/connecting"},{"title":"Connections quickstart","sidebarTitle":"Quickstart","href":"/postgres/connecting/quickstart"},{"title":"Managing Roles for your Postgres database","sidebarTitle":"Role management","href":"/postgres/connecting/roles"},{"title":"PgBouncer","href":"/postgres/connecting/pgbouncer"},{"title":"PostgreSQL Proxy - Client Error Reference","sidebarTitle":"Proxy error reference","href":"/postgres/connecting/client-error-reference"},{"title":"Using the Neon serverless driver","sidebarTitle":"Neon serverless driver","href":"/postgres/connecting/neon-serverless-driver"},{"title":"IP restrictions","sidebarTitle":"IP restrictions","href":"/postgres/connecting/ip-restrictions"},{"group":"MCP","pages":[{"title":"PlanetScale Model Context Protocol (MCP)","sidebarTitle":"Overview","href":"/mcp-server"},{"title":"Authenticate the MCP server with a service token","sidebarTitle":"Service tokens","href":"/mcp/service-token"}]},{"title":"Self-improving database","sidebarTitle":"Self-improving database","href":"/self-improving-database"},{"title":"PlanetScale Terraform provider","sidebarTitle":"Terraform provider","href":"/terraform"},{"group":"Private connections","pages":[{"title":"Connect privately with AWS PrivateLink","sidebarTitle":"AWS PrivateLink","href":"/postgres/connecting/private-connections/aws-privatelink"},{"title":"Connect privately with GCP Private Service Connect","sidebarTitle":"GCP Private Service Connect","href":"/postgres/connecting/private-connections/gcp-private-service-connect"}]}]},{"group":"Imports","pages":[{"title":"Postgres Imports","sidebarTitle":"Postgres import overview","href":"/postgres/imports/postgres-imports"},{"title":"Discovery Tool","sidebarTitle":"Discovery tool","href":"/postgres/imports/discovery-tool"},{"title":"Postgres Imports - Cloudflare D1","sidebarTitle":"Import from Cloudflare D1","href":"/postgres/imports/postgres-migrate-d1"},{"title":"Postgres Imports - PGDump and Restore","sidebarTitle":"Import with dump/restore","href":"/postgres/imports/postgres-migrate-dumprestore"},{"title":"Postgres Imports - WAL Streaming","sidebarTitle":"Import with WAL streaming","href":"/postgres/imports/postgres-migrate-walstream"},{"title":"Postgres Imports - pgcopydb","sidebarTitle":"Import with pgcopydb","href":"/postgres/imports/postgres-migrate-pgcopydb"},{"title":"Postgres Imports - Amazon DMS","sidebarTitle":"Import with DMS","href":"/postgres/imports/postgres-migrate-dms"},{"title":"Import public IP addresses","href":"/postgres/imports/import-ips"},{"group":"Provider-specific guides","pages":[{"title":"Migrate from Supabase to PlanetScale","sidebarTitle":"Import from Supabase","href":"/postgres/imports/supabase"},{"title":"Migrate from Neon to PlanetScale","sidebarTitle":"Import from Neon","href":"/postgres/imports/neon"},{"title":"Migrate from Heroku to PlanetScale","sidebarTitle":"Import from Heroku","href":"/postgres/imports/heroku"},{"title":"Migrate from Aurora to PlanetScale","sidebarTitle":"Import from Aurora","href":"/postgres/imports/aurora"},{"title":"Migrate from Aurora using Amazon DMS with CloudFormation","sidebarTitle":"Import from Aurora using DMS","href":"/postgres/imports/aurora-dms"}]}]},{"group":"Branching","pages":[{"title":"Branching","sidebarTitle":"Overview","href":"/postgres/branching"},{"title":"Development Environments","sidebarTitle":"Development environments","href":"/postgres/development-environments"}]},{"group":"Integrations","pages":[{"title":"Artie integration","sidebarTitle":"Artie","href":"/postgres/integrations/artie"},{"title":"PlanetScale GitHub Actions","sidebarTitle":"Automating with GitHub Actions","href":"/postgres/integrations/github-actions"},{"title":"Logical replication and Change Data Capture (CDC)","sidebarTitle":"Logical replication and Change Data Capture (CDC)","href":"/postgres/integrations/logical-cdc"}]},{"group":"Monitoring","pages":[{"title":"Query Insights","href":"/postgres/monitoring/query-insights"},{"title":"Inspect live Postgres connections","sidebarTitle":"Connections","href":"/postgres/monitoring/connections"},{"title":"Tags","href":"/postgres/monitoring/query-tags"},{"title":"Cluster Metrics","sidebarTitle":"Metrics","href":"/postgres/monitoring/metrics"},{"title":"Cluster Logs","sidebarTitle":"Logs","href":"/postgres/monitoring/logs"},{"title":"Authentication attempts","sidebarTitle":"Authentication attempts","href":"/postgres/monitoring/authentication-attempts"},{"title":"Anomalies","href":"/postgres/monitoring/anomalies"},{"title":"Errors","sidebarTitle":"Errors","href":"/postgres/monitoring/errors"},{"title":"Schema recommendations","href":"/postgres/monitoring/schema-recommendations"},{"group":"Integrations","pages":[{"title":"Prometheus integration for PlanetScale Postgres","sidebarTitle":"Prometheus integration","href":"/postgres/monitoring/prometheus-postgres"},{"title":"Prometheus metrics for PlanetScale Postgres","sidebarTitle":"Prometheus metrics reference","href":"/postgres/monitoring/prometheus-metrics-postgres"},{"title":"Sending Prometheus Metrics to Datadog for PlanetScale Postgres","sidebarTitle":"Datadog integration","href":"/postgres/monitoring/prometheus-metrics-datadog-postgres"},{"title":"pganalyze collector","sidebarTitle":"pganalyze collector","href":"/postgres/monitoring/pganalyze"}]}]},{"group":"Troubleshooting","pages":[{"title":"Read-only mode","href":"/postgres/troubleshooting/read-only-mode"},{"title":"Out of memory (OOM)","href":"/postgres/troubleshooting/out-of-memory"},{"title":"Switchovers","sidebarTitle":"Switchovers","href":"/postgres/troubleshooting/switchovers"}]},{"group":"Backups","pages":[{"title":"Back up and restore","href":"/postgres/backups"},{"title":"Point-in-time recovery","href":"/postgres/backups/point-in-time-recovery"}]},{"group":"Scaling","pages":[{"title":"Database replicas","sidebarTitle":"Replicas","href":"/postgres/scaling/replicas"},{"title":"Dedicated read replicas","sidebarTitle":"Dedicated read replicas","href":"/postgres/scaling/dedicated-read-replicas"},{"title":"Horizontal sharding for Postgres","sidebarTitle":"Sharding","href":"/postgres/sharding"}]},{"group":"Search (TIN)","pages":[{"title":"TIN: PlanetScale Postgres Search","sidebarTitle":"Overview","href":"/postgres/search"},{"title":"Get started with TIN","sidebarTitle":"Get started","href":"/postgres/search/get-started"},{"title":"TINQL","href":"/postgres/search/tinql"},{"title":"Scoring","href":"/postgres/search/scoring"},{"title":"Highlighting","sidebarTitle":"Highlighting","href":"/postgres/search/highlighting"},{"title":"Operational guidance","sidebarTitle":"Operations","href":"/postgres/search/operations"},{"group":"Reference","pages":[{"title":"Indexes","sidebarTitle":"Indexes","href":"/postgres/search/reference/indexes"},{"title":"The ==> operator","sidebarTitle":"Operator","href":"/postgres/search/reference/operator"},{"title":"Functions","sidebarTitle":"Functions","href":"/postgres/search/reference/functions"},{"title":"Recommended SQL shapes","sidebarTitle":"SQL shapes","href":"/postgres/search/reference/sql-shapes"},{"title":"Limitations","sidebarTitle":"Limitations","href":"/postgres/search/reference/limitations"},{"title":"Settings","sidebarTitle":"Settings","href":"/postgres/search/reference/settings"}]}]},{"group":"Database Traffic Control™","pages":[{"title":"Database Traffic Control","sidebarTitle":"Overview","href":"/postgres/traffic-control"},{"title":"Concepts","href":"/postgres/traffic-control/concepts"},{"title":"Getting started","href":"/postgres/traffic-control/getting-started"},{"title":"Examples and recipes","href":"/postgres/traffic-control/examples-and-recipes"},{"title":"FAQ and troubleshooting","href":"/postgres/traffic-control/faq-and-troubleshooting"}]}]},{"group":"Guides","pages":[{"title":"PlanetScale Postgres with Drizzle","sidebarTitle":"Drizzle","href":"/postgres/tutorials/planetscale-postgres-drizzle"},{"title":"PlanetScale Postgres with Kysely","sidebarTitle":"Kysely","href":"/postgres/tutorials/planetscale-postgres-kysely"},{"title":"PlanetScale Postgres with Prisma","sidebarTitle":"Prisma","href":"/postgres/tutorials/planetscale-postgres-prisma"},{"title":"PlanetScale Postgres with Laravel","sidebarTitle":"Laravel","href":"/postgres/tutorials/planetscale-postgres-laravel"},{"title":"PlanetScale Postgres with Ruby on Rails","sidebarTitle":"Ruby on Rails","href":"/postgres/tutorials/planetscale-postgres-rails"},{"title":"PlanetScale Postgres with Cloudflare Workers","sidebarTitle":"Cloudflare Workers","href":"/postgres/tutorials/planetscale-postgres-cloudflare-workers"},{"title":"PlanetScale Postgres with Bun","sidebarTitle":"Bun","href":"/postgres/tutorials/planetscale-postgres-bun"},{"title":"PlanetScale Postgres with Node.js","sidebarTitle":"Node.js","href":"/postgres/tutorials/planetscale-postgres-node"}]}]},{"tab":"API Reference","groups":[{"group":"Introduction","pages":[{"title":"Getting started with PlanetScale API","href":"/api/reference/getting-started-with-planetscale-api"},{"title":"Rate limits","href":"/api/reference/rate-limits"},{"title":"Pagination","href":"/api/reference/pagination"},{"title":"PlanetScale API and OAuth applications","sidebarTitle":"API and OAuth applications","href":"/api/planetscale-api-oauth-applications"},{"title":"Service tokens","href":"/api/service-tokens"},{"title":"PlanetScale API with OpenID Connect","href":"/api/oidc"},{"title":"OpenAPI Spec","href":"/api/openapi-spec"}]},{"group":"Webhooks in PlanetScale","pages":[{"title":"Webhooks","sidebarTitle":"Setting up webhooks","href":"/api/webhooks"},{"title":"Webhook events reference","href":"/api/webhook-events"}]},{"group":"Authentication","pages":[{"title":"Service tokens","href":"/api/reference/service-tokens"},{"title":"OAuth","href":"/api/reference/oauth"},{"group":"OAuth tokens","pages":[{"title":"Create or refresh OAuth token","href":"/api/reference/oauth/create-token"},{"title":"Revoke OAuth token","href":"/api/reference/oauth/revoke-token"},{"title":"Get OAuth token info","href":"/api/reference/oauth/token-info"}]},{"title":"OAuth access scopes","href":"/api/reference/oauth-access-scopes"}]},{"group":"General API endpoints","pages":[{"group":"Audit logs","pages":[{"openapi":"get /organizations/{organization}/audit-log","title":"List audit logs","href":"/api/reference/list_audit_logs"}]},{"group":"Backup policies","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/backup-policies","title":"List backup policies","href":"/api/reference/list_backup_policies"},{"openapi":"post /organizations/{organization}/databases/{database}/backup-policies","title":"Create a backup policy","href":"/api/reference/create_backup_policy"},{"openapi":"get /organizations/{organization}/databases/{database}/backup-policies/{id}","title":"Get a backup policy","href":"/api/reference/get_backup_policy"},{"openapi":"patch /organizations/{organization}/databases/{database}/backup-policies/{id}","title":"Update a backup policy","href":"/api/reference/update_backup_policy"},{"openapi":"delete /organizations/{organization}/databases/{database}/backup-policies/{id}","title":"Delete a backup policy","href":"/api/reference/delete_backup_policy"}]},{"group":"Backups","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/backups","title":"List backups","href":"/api/reference/list_backups"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/backups","title":"Create a backup","href":"/api/reference/create_backup"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/backups/{id}","title":"Get a backup","href":"/api/reference/get_backup"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/backups/{id}","title":"Delete a backup","href":"/api/reference/delete_backup"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/backups/{id}","title":"Update a backup","href":"/api/reference/update_backup"}]},{"group":"Billing payment methods","pages":[{"openapi":"get /organizations/{organization}/billing/payment-method","title":"Get the current billing payment method","href":"/api/reference/get_organization_billing_payment_method"},{"openapi":"delete /organizations/{organization}/billing/payment-method","title":"Delete the current billing payment method","href":"/api/reference/delete_organization_billing_payment_method"}]},{"group":"Cluster sizes","pages":[{"openapi":"get /organizations/{organization}/cluster-size-skus","title":"List available cluster sizes","href":"/api/reference/list_cluster_size_skus"}]},{"group":"Database branches","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches","title":"List branches","href":"/api/reference/list_branches"},{"openapi":"post /organizations/{organization}/databases/{database}/branches","title":"Create a branch","href":"/api/reference/create_branch"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}","title":"Get a branch","href":"/api/reference/get_branch"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}","title":"Update a branch","href":"/api/reference/update_branch"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}","title":"Delete a branch","href":"/api/reference/delete_branch"}]},{"group":"Databases","pages":[{"openapi":"get /organizations/{organization}/databases","title":"List databases","href":"/api/reference/list_databases"},{"openapi":"post /organizations/{organization}/databases","title":"Create a database","href":"/api/reference/create_database"},{"openapi":"get /organizations/{organization}/databases/{database}","title":"Get a database","href":"/api/reference/get_database"},{"openapi":"patch /organizations/{organization}/databases/{database}","title":"Update database settings","href":"/api/reference/update_database_settings"},{"openapi":"delete /organizations/{organization}/databases/{database}","title":"Delete a database","href":"/api/reference/delete_database"},{"openapi":"get /organizations/{organization}/databases/{database}/read-only-regions","title":"List read-only regions","href":"/api/reference/list_read_only_regions"},{"openapi":"get /organizations/{organization}/databases/{database}/regions","title":"List database regions","href":"/api/reference/list_database_regions"}]},{"group":"Invoices","pages":[{"openapi":"get /organizations/{organization}/invoices","title":"Get invoices","href":"/api/reference/list_invoices"},{"openapi":"get /organizations/{organization}/invoices/{id}","title":"Get an invoice","href":"/api/reference/get_invoice"},{"openapi":"get /organizations/{organization}/invoices/{id}/line-items","title":"Get invoice line items","href":"/api/reference/get_invoice_line_items"}]},{"group":"Maintenance schedules","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/maintenance-schedules","title":"List maintenance schedules","href":"/api/reference/list_maintenance_schedules"},{"openapi":"get /organizations/{organization}/databases/{database}/maintenance-schedules/{id}","title":"Get a maintenance schedule","href":"/api/reference/get_maintenance_schedule"},{"openapi":"patch /organizations/{organization}/databases/{database}/maintenance-schedules/{id}","title":"Update a maintenance schedule","href":"/api/reference/update_maintenance_schedule"},{"openapi":"get /organizations/{organization}/databases/{database}/maintenance-schedules/{id}/windows","title":"List maintenance windows","href":"/api/reference/list_maintenance_windows"}]},{"group":"Metrics","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/keyspace-tables","title":"Get table storage metrics by keyspace","href":"/api/reference/get_branch_keyspace_table_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics","title":"Get time-series metrics","href":"/api/reference/get_branch_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/query","title":"Get time-series metrics for SQL queries","href":"/api/reference/get_branch_query_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/tables","title":"Get table storage metrics","href":"/api/reference/get_branch_table_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/tag","title":"Get time-series metrics grouped by query tags","href":"/api/reference/get_branch_tag_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/instant","title":"Get current metric values","href":"/api/reference/get_instant_branch_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/tablets-instant","title":"Get current tablet metrics","href":"/api/reference/get_instant_tablet_metrics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/metrics/tablets","title":"Get time-series tablet metrics","href":"/api/reference/get_tablet_metrics"}]},{"group":"OAuth applications","pages":[{"openapi":"get /organizations/{organization}/oauth-applications","title":"List OAuth applications","href":"/api/reference/list_oauth_applications"},{"openapi":"get /organizations/{organization}/oauth-applications/{application_id}","title":"Get an OAuth application","href":"/api/reference/get_oauth_application"},{"openapi":"get /organizations/{organization}/oauth-applications/{application_id}/tokens/{token_id}","title":"Get an OAuth token","href":"/api/reference/get_oauth_token"},{"openapi":"delete /organizations/{organization}/oauth-applications/{application_id}/tokens/{token_id}","title":"Delete an OAuth token","href":"/api/reference/delete_oauth_token"}]},{"group":"OAuth tokens","pages":[{"openapi":"post /organizations/{organization}/oauth-applications/{id}/token","title":"Create or renew an OAuth token","href":"/api/reference/create_oauth_token"}]},{"group":"Organization invitations","pages":[{"openapi":"get /organizations/{organization}/invitations","title":"List pending invitations","href":"/api/reference/list_organization_invitations"},{"openapi":"post /organizations/{organization}/invitations","title":"Send an invitation","href":"/api/reference/create_organization_invitation"},{"openapi":"delete /organizations/{organization}/invitations/{id}","title":"Cancel an invitation","href":"/api/reference/cancel_organization_invitation"}]},{"group":"Organization members","pages":[{"openapi":"get /organizations/{organization}/members","title":"List organization members","href":"/api/reference/list_organization_members"},{"openapi":"get /organizations/{organization}/members/{id}","title":"Get an organization member","href":"/api/reference/get_organization_membership"},{"openapi":"patch /organizations/{organization}/members/{id}","title":"Update organization member role","href":"/api/reference/update_organization_membership"},{"openapi":"delete /organizations/{organization}/members/{id}","title":"Remove a member from an organization","href":"/api/reference/remove_organization_member"}]},{"group":"Organizations","pages":[{"openapi":"get /organizations","title":"List organizations","href":"/api/reference/list_organizations"},{"openapi":"get /organizations/{organization}","title":"Get an organization","href":"/api/reference/get_organization"},{"openapi":"patch /organizations/{organization}","title":"Update an organization","href":"/api/reference/update_organization"},{"openapi":"get /organizations/{organization}/regions","title":"List regions for an organization","href":"/api/reference/list_regions_for_organization"}]},{"group":"Organization teams","pages":[{"openapi":"get /organizations/{organization}/teams","title":"List teams in an organization","href":"/api/reference/list_organization_teams"},{"openapi":"post /organizations/{organization}/teams","title":"Create an organization team","href":"/api/reference/create_organization_team"},{"openapi":"get /organizations/{organization}/teams/{team}","title":"Get an organization team","href":"/api/reference/get_organization_team"},{"openapi":"patch /organizations/{organization}/teams/{team}","title":"Update an organization team","href":"/api/reference/update_organization_team"},{"openapi":"delete /organizations/{organization}/teams/{team}","title":"Delete an organization team","href":"/api/reference/delete_organization_team"},{"openapi":"get /organizations/{organization}/teams/{team}/members","title":"List team members","href":"/api/reference/list_organization_team_members"},{"openapi":"post /organizations/{organization}/teams/{team}/members","title":"Add a member to a team","href":"/api/reference/add_organization_team_member"},{"openapi":"get /organizations/{organization}/teams/{team}/members/{id}","title":"Get a team member","href":"/api/reference/get_organization_team_member"},{"openapi":"delete /organizations/{organization}/teams/{team}/members/{id}","title":"Remove a member from a team","href":"/api/reference/remove_organization_team_member"}]},{"group":"Query insights","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights","title":"List branch queries","href":"/api/reference/list_branch_queries"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/{fingerprint}","title":"Retrieve query statistics","href":"/api/reference/get_query_statistics"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/{fingerprint}/summary","title":"Retrieve a summary of query statistics","href":"/api/reference/get_query_summary"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/queries/{id}","title":"Retrieve a branch query","href":"/api/reference/get_branch_query"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/errors","title":"List branch query errors","href":"/api/reference/list_branch_query_errors"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/errors/{fingerprint}","title":"List queries for an error fingerprint","href":"/api/reference/get_branch_query_error"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/anomalies","title":"List branch anomalies","href":"/api/reference/list_branch_anomalies"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/anomalies/{id}","title":"Retrieve a branch anomaly","href":"/api/reference/get_branch_anomaly"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/tags","title":"List query tags","href":"/api/reference/list_branch_query_tags"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/tags/summaries","title":"List query statistics grouped by tag","href":"/api/reference/list_branch_query_tag_summaries"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/tags/{tag}","title":"Retrieve a query tag","href":"/api/reference/get_branch_query_tag"}]},{"group":"Query Insights reports","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/query-patterns","title":"List generated query patterns reports","href":"/api/reference/list_generated_query_patterns_reports"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/query-patterns","title":"Create a new query patterns report","href":"/api/reference/create_query_patterns_report"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/query-patterns/{id}","title":"Show the status of a query patterns report","href":"/api/reference/get_query_patterns_report_status"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/query-patterns/{id}","title":"Delete a query patterns report","href":"/api/reference/delete_query_patterns_report"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/query-patterns/{id}/download","title":"Download a finished query patterns report","href":"/api/reference/get_query_patterns_report"}]},{"group":"Schema recommendations","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/schema-recommendations","title":"List schema recommendations","href":"/api/reference/list_schema_recommendations"},{"openapi":"get /organizations/{organization}/databases/{database}/schema-recommendations/{number}","title":"Get a schema recommendation","href":"/api/reference/get_schema_recommendation"},{"openapi":"post /organizations/{organization}/databases/{database}/schema-recommendations/{number}/dismiss","title":"Dismiss a schema recommendation","href":"/api/reference/dismiss_schema_recommendation"}]},{"group":"Regions","pages":[{"openapi":"get /regions","title":"List public regions","href":"/api/reference/list_public_regions"}]},{"group":"Service tokens","pages":[{"openapi":"post /organizations/{organization}/service-tokens","title":"Create a service token","href":"/api/reference/create_service_token"},{"openapi":"delete /organizations/{organization}/service-tokens/{id}","title":"Delete a service token","href":"/api/reference/delete_service_token"},{"openapi":"get /organizations/{organization}/service-tokens/{id}","title":"Get a service token","href":"/api/reference/get_service_token"},{"openapi":"get /organizations/{organization}/service-tokens","title":"List service tokens","href":"/api/reference/list_service_tokens"}]},{"group":"Users","pages":[{"openapi":"get /user","title":"Get current user","href":"/api/reference/get_current_user"}]},{"group":"Webhooks","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/webhooks","title":"List webhooks","href":"/api/reference/list_webhooks"},{"openapi":"post /organizations/{organization}/databases/{database}/webhooks","title":"Create a webhook","href":"/api/reference/create_webhook"},{"openapi":"get /organizations/{organization}/databases/{database}/webhooks/{id}","title":"Get a webhook","href":"/api/reference/get_webhook"},{"openapi":"patch /organizations/{organization}/databases/{database}/webhooks/{id}","title":"Update a webhook","href":"/api/reference/update_webhook"},{"openapi":"delete /organizations/{organization}/databases/{database}/webhooks/{id}","title":"Delete a webhook","href":"/api/reference/delete_webhook"},{"openapi":"post /organizations/{organization}/databases/{database}/webhooks/{id}/test","title":"Test a webhook","href":"/api/reference/test_webhook"}]}]},{"group":"Postgres API endpoints","pages":[{"group":"Branch changes","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/changes","title":"Get branch change requests","href":"/api/reference/list_branch_change_requests"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/changes/{id}","title":"Get a branch change request","href":"/api/reference/get_branch_change_request"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/changes","title":"Upsert a change request for cluster size, replicas, storage, or parameters","href":"/api/reference/update_branch_change_request"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/resizes","title":"Cancel a change request","href":"/api/reference/cancel_branch_change_request"}]},{"group":"Branch maintenance windows","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/maintenance-window","title":"Get a branch's maintenance window","href":"/api/reference/get_branch_maintenance_window"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/maintenance-window","title":"Update a branch's maintenance window","href":"/api/reference/update_branch_maintenance_window"}]},{"group":"Cluster extensions","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/extensions","title":"List cluster extensions","href":"/api/reference/list_extensions"}]},{"group":"Cluster parameters","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/parameters","title":"List cluster parameters","href":"/api/reference/list_parameters"}]},{"group":"Dedicated PgBouncers","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/bouncers","title":"List bouncers","href":"/api/reference/list_bouncers"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/bouncers","title":"Create a bouncer","href":"/api/reference/create_bouncer"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/bouncers/{bouncer}","title":"Get a bouncer","href":"/api/reference/get_bouncer"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/bouncers/{bouncer}","title":"Delete a bouncer","href":"/api/reference/delete_bouncer"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/bouncer-resizes","title":"Get bouncer resize requests","href":"/api/reference/list_branch_bouncer_resize_requests"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/bouncers/{bouncer}/resizes","title":"Get bouncer resize requests","href":"/api/reference/list_bouncer_resize_requests"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/bouncers/{bouncer}/resizes","title":"Upsert a bouncer resize request","href":"/api/reference/update_bouncer_resize_request"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/bouncers/{bouncer}/resizes","title":"Cancel a resize request","href":"/api/reference/cancel_bouncer_resize_request"}]},{"group":"IP restrictions","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/cidrs","title":"List IP restriction entries","href":"/api/reference/list_database_postgres_cidrs"},{"openapi":"post /organizations/{organization}/databases/{database}/cidrs","title":"Create an IP restriction entry","href":"/api/reference/create_database_postgres_cidr"},{"openapi":"get /organizations/{organization}/databases/{database}/cidrs/{id}","title":"Get an IP restriction entry","href":"/api/reference/get_database_postgres_cidr"},{"openapi":"patch /organizations/{organization}/databases/{database}/cidrs/{id}","title":"Update an IP restriction entry","href":"/api/reference/update_database_postgres_cidr"},{"openapi":"delete /organizations/{organization}/databases/{database}/cidrs/{id}","title":"Delete an IP restriction entry","href":"/api/reference/delete_database_postgres_cidr"}]},{"group":"Maintenance events","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/maintenance-events","title":"List maintenance events","href":"/api/reference/list_maintenance_events"},{"openapi":"get /organizations/{organization}/databases/{database}/maintenance-events/{id}","title":"Get a maintenance event","href":"/api/reference/get_maintenance_event"},{"openapi":"patch /organizations/{organization}/databases/{database}/maintenance-events/{id}","title":"Reschedule a maintenance event","href":"/api/reference/reschedule_maintenance_event"}]},{"group":"Dedicated read replicas","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replicas","title":"List dedicated read replicas","href":"/api/reference/list_dedicated_read_replicas"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replicas","title":"Create a dedicated read replica","href":"/api/reference/create_dedicated_read_replica"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replicas/{dedicated_read_replica}","title":"Get a dedicated read replica","href":"/api/reference/get_dedicated_read_replica"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replicas/{dedicated_read_replica}","title":"Update a dedicated read replica","href":"/api/reference/update_dedicated_read_replica"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replicas/{dedicated_read_replica}","title":"Delete a dedicated read replica","href":"/api/reference/delete_dedicated_read_replica"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/dedicated-read-replica-changes","title":"Get dedicated read replica change requests","href":"/api/reference/list_dedicated_read_replica_change_requests"}]},{"group":"Roles","pages":[{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/roles","title":"Create role credentials","href":"/api/reference/create_role"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}","title":"Delete role credentials","href":"/api/reference/delete_role"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/roles/default","title":"Get the default postgres role","href":"/api/reference/get_default_role"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}","title":"Get a role","href":"/api/reference/get_role"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/roles","title":"List roles","href":"/api/reference/list_roles"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}/reassign","title":"Reassign objects owned by one role to another role","href":"/api/reference/reassign_role_objects"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}/renew","title":"Renew role expiration","href":"/api/reference/renew_role"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/roles/reset-default","title":"Reset default credentials","href":"/api/reference/reset_default_role"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}/reset","title":"Reset a role's password","href":"/api/reference/reset_role"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/roles/{id}","title":"Update role name","href":"/api/reference/update_role"}]},{"group":"Switchovers","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/switchovers","title":"List switchovers","href":"/api/reference/list_switchovers"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/switchovers","title":"Create a switchover","href":"/api/reference/create_switchover"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/switchovers/{id}","title":"Get a switchover","href":"/api/reference/get_switchover"}]},{"group":"Traffic budgets","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets","title":"List traffic budgets","href":"/api/reference/list_traffic_budgets"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets","title":"Create a traffic budget","href":"/api/reference/create_traffic_budget"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets/{id}","title":"Get a traffic budget","href":"/api/reference/get_traffic_budget"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets/{id}","title":"Update a traffic budget","href":"/api/reference/update_traffic_budget"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets/{id}","title":"Delete a traffic budget","href":"/api/reference/delete_traffic_budget"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/insights/{fingerprint}/traffic/budgets","title":"List traffic budgets affecting a query fingerprint","href":"/api/reference/list_traffic_budgets_for_query"}]},{"group":"Traffic rules","pages":[{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets/{budget_id}/rules","title":"Create a traffic rule","href":"/api/reference/create_traffic_rule"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/traffic/budgets/{budget_id}/rules/{id}","title":"Delete a traffic rule","href":"/api/reference/delete_traffic_rule"}]}]},{"group":"Neki API endpoints","pages":[{"group":"Admins","pages":[{"title":"Get the admin for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/admin","href":"/api/reference/get_admin"},{"title":"Update the admin for a branch","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/admin","href":"/api/reference/update_admin"},{"title":"List admin size SKUs for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/admin-size-skus","href":"/api/reference/list_admin_size_skus"},{"title":"List change requests for an admin","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/admin/change-requests","href":"/api/reference/list_admin_change_requests"},{"title":"Get a change request for an admin","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/admin/change-requests/{id}","href":"/api/reference/get_admin_change_request"},{"title":"Cancel a change request for an admin","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/admin/change-requests/{id}","href":"/api/reference/cancel_admin_change_request"},{"title":"List parameters for an admin","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/admin/parameters","href":"/api/reference/list_admin_parameters"}]},{"group":"Configuration profiles","pages":[{"title":"List configuration profiles for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles","href":"/api/reference/list_shard_configuration_profiles"},{"title":"Create a configuration profile for a branch","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles","href":"/api/reference/create_shard_configuration_profile"},{"title":"Get a configuration profile for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}","href":"/api/reference/get_shard_configuration_profile"},{"title":"Update a configuration profile for a branch","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}","href":"/api/reference/update_shard_configuration_profile"},{"title":"Delete a configuration profile for a branch","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}","href":"/api/reference/delete_shard_configuration_profile"},{"title":"Run maintenance for selected configuration profiles","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/maintenance","href":"/api/reference/run_shard_configuration_profiles_maintenance"},{"title":"Run maintenance for a configuration profile","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/maintenance","href":"/api/reference/run_shard_configuration_profile_maintenance"},{"title":"List change requests for a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/change-requests","href":"/api/reference/list_shard_configuration_profile_change_requests"},{"title":"Get a change request for a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/change-requests/{id}","href":"/api/reference/get_shard_configuration_profile_change_request"},{"title":"Cancel a change request for a configuration profile","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/change-requests/{id}","href":"/api/reference/cancel_shard_configuration_profile_change_request"},{"title":"List extensions for a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/extensions","href":"/api/reference/list_shard_configuration_profile_extensions"},{"title":"Enable or disable an extension for a configuration profile","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/extensions/{extension}","href":"/api/reference/update_shard_configuration_profile_extension"},{"title":"List parameters for a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/parameters","href":"/api/reference/list_shard_configuration_profile_parameters"}]},{"group":"Configuration profile shards","pages":[{"title":"List shards for a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards","href":"/api/reference/list_shard_configuration_profile_shards"},{"title":"Add a shard to a configuration profile","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards","href":"/api/reference/create_shard_configuration_profile_shard"},{"title":"Add shards to a configuration profile","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards/bulk","href":"/api/reference/bulk_create_shard_configuration_profile_shards"},{"title":"Assign shards to a configuration profile","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards","href":"/api/reference/assign_shard_configuration_profile_shards"},{"title":"Remove shards from a configuration profile","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards","href":"/api/reference/delete_shard_configuration_profile_shards"},{"title":"Get a shard in a configuration profile","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards/{id}","href":"/api/reference/get_shard_configuration_profile_shard"},{"title":"Update a shard in a configuration profile","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards/{id}","href":"/api/reference/update_shard_configuration_profile_shard"},{"title":"Remove a shard from a configuration profile","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/configuration-profiles/{configuration_profile}/shards/{id}","href":"/api/reference/delete_shard_configuration_profile_shard"}]},{"group":"Data topology","pages":[{"title":"Get the data topology for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/data-topology","href":"/api/reference/get_data_topology"},{"title":"Set the data topology for a branch","openapi":"put /organizations/{organization}/databases/{database}/branches/{branch}/data-topology","href":"/api/reference/update_data_topology"}]},{"group":"Default configuration profile","pages":[{"title":"Get the default configuration profile for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/default-configuration-profile","href":"/api/reference/get_default_shard_configuration_profile"},{"title":"Set the default configuration profile for a branch","openapi":"put /organizations/{organization}/databases/{database}/branches/{branch}/default-configuration-profile","href":"/api/reference/set_default_shard_configuration_profile"}]},{"group":"Neki changes","pages":[{"title":"List change requests for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/neki-changes","href":"/api/reference/list_neki_change_requests"},{"title":"Get a change request for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/neki-changes/{id}","href":"/api/reference/get_neki_change_request"},{"title":"Cancel a change request for a branch","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/neki-changes/{id}","href":"/api/reference/cancel_neki_change_request"}]},{"group":"Routers","pages":[{"title":"List router size SKUs for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/router-size-skus","href":"/api/reference/list_router_size_skus"},{"title":"List routers for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/routers","href":"/api/reference/list_routers"},{"title":"Create a router for a branch","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/routers","href":"/api/reference/create_router"},{"title":"Get a router for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}","href":"/api/reference/get_router"},{"title":"Update a router for a branch","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}","href":"/api/reference/update_router"},{"title":"Delete a router from a branch","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}","href":"/api/reference/delete_router"},{"title":"List change requests for a router","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}/change-requests","href":"/api/reference/list_router_change_requests"},{"title":"Get a change request for a router","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}/change-requests/{id}","href":"/api/reference/get_router_change_request"},{"title":"Cancel a change request for a router","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}/change-requests/{id}","href":"/api/reference/cancel_router_change_request"},{"title":"List parameters for a router","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/routers/{router}/parameters","href":"/api/reference/list_router_parameters"}]},{"group":"Shards","pages":[{"title":"List shards for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/shards","href":"/api/reference/list_shards"},{"title":"Add shards to a branch","openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/shards","href":"/api/reference/create_shard"},{"title":"Get a shard for a branch","openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/shards/{id}","href":"/api/reference/get_shard"},{"title":"Update a shard for a branch","openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/shards/{id}","href":"/api/reference/update_shard"},{"title":"Remove a shard from a branch","openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/shards/{id}","href":"/api/reference/delete_shard"}]}]},{"group":"Vitess API endpoints","pages":[{"group":"Branch cluster size","pages":[{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/cluster","title":"Change a branch cluster configuration","href":"/api/reference/update_branch_cluster_config"}]},{"group":"Branch promotion","pages":[{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/demote","title":"Demote a branch","href":"/api/reference/demote_branch"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/promote","title":"Promote a branch","href":"/api/reference/promote_branch"}]},{"group":"Branch schema","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/schema","title":"Get a branch schema","href":"/api/reference/get_branch_schema"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/schema/lint","title":"Lint a branch schema","href":"/api/reference/lint_branch_schema"}]},{"group":"Database branch keyspaces","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces","title":"Get keyspaces","href":"/api/reference/list_keyspaces"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces","title":"Create a keyspace","href":"/api/reference/create_keyspace"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}","title":"Get a keyspace","href":"/api/reference/get_keyspace"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}","title":"Delete a keyspace","href":"/api/reference/delete_keyspace"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}","title":"Configure keyspace settings","href":"/api/reference/update_keyspace"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}/rollout-status","title":"Get keyspace rollout status","href":"/api/reference/get_keyspace_rollout_status"}]},{"group":"Database branch passwords","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/passwords","title":"List passwords","href":"/api/reference/list_passwords"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/passwords","title":"Create a password","href":"/api/reference/create_password"},{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/passwords/{id}","title":"Get a password","href":"/api/reference/get_password"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/passwords/{id}","title":"Update a password","href":"/api/reference/update_password"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/passwords/{id}","title":"Delete a password","href":"/api/reference/delete_password"},{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/passwords/{id}/renew","title":"Renew a password","href":"/api/reference/renew_password"}]},{"group":"Deploy request throttling","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/throttler","title":"Get database throttler configurations","href":"/api/reference/get_database_throttler"},{"openapi":"patch /organizations/{organization}/databases/{database}/throttler","title":"Update database throttler configurations","href":"/api/reference/update_database_throttler"}]},{"group":"Deploy requests","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/deploy-queue","title":"Get the deploy queue","href":"/api/reference/get_deploy_queue"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests","title":"List deploy requests","href":"/api/reference/list_deploy_requests"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests","title":"Create a deploy request","href":"/api/reference/create_deploy_request"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}","title":"Get a deploy request","href":"/api/reference/get_deploy_request"},{"openapi":"patch /organizations/{organization}/databases/{database}/deploy-requests/{number}","title":"Close a deploy request","href":"/api/reference/close_deploy_request"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/apply-deploy","title":"Complete a gated deploy request","href":"/api/reference/complete_gated_deploy_request"},{"openapi":"put /organizations/{organization}/databases/{database}/deploy-requests/{number}/auto-apply","title":"Update auto-apply for deploy request","href":"/api/reference/update_auto_apply"},{"openapi":"put /organizations/{organization}/databases/{database}/deploy-requests/{number}/auto-delete-branch","title":"Update auto-delete branch for deploy request","href":"/api/reference/update_auto_delete_branch"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/cancel","title":"Cancel a queued deploy request","href":"/api/reference/cancel_deploy_request"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/complete-deploy","title":"Complete an errored deploy","href":"/api/reference/complete_errored_deploy"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/deploy","title":"Queue a deploy request","href":"/api/reference/queue_deploy_request"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}/deployment","title":"Get a deployment","href":"/api/reference/get_deployment"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}/operations","title":"List deploy operations","href":"/api/reference/list_deploy_operations"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/revert","title":"Complete a revert","href":"/api/reference/complete_revert"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}/reviews","title":"List deploy request reviews","href":"/api/reference/list_deploy_request_reviews"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/reviews","title":"Review a deploy request","href":"/api/reference/review_deploy_request"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/skip-revert","title":"Skip revert period","href":"/api/reference/skip_revert_period"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}/storage-check","title":"Check deploy request storage","href":"/api/reference/check_deploy_request_storage"},{"openapi":"post /organizations/{organization}/databases/{database}/deploy-requests/{number}/force-cutover","title":"Enable force cutover for a deploy request","href":"/api/reference/force_cutover_deploy_request"},{"openapi":"get /organizations/{organization}/databases/{database}/deploy-requests/{number}/throttler","title":"Get deploy request throttler configurations","href":"/api/reference/get_deploy_request_throttler"},{"openapi":"patch /organizations/{organization}/databases/{database}/deploy-requests/{number}/throttler","title":"Update deploy request throttler configurations","href":"/api/reference/update_deploy_request_throttler"}]},{"group":"Keyspace VSchemas","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}/vschema","title":"Get the VSchema for the keyspace","href":"/api/reference/get_keyspace_vschema"},{"openapi":"patch /organizations/{organization}/databases/{database}/branches/{branch}/keyspaces/{keyspace}/vschema","title":"Update the VSchema for the keyspace","href":"/api/reference/update_keyspace_vschema"}]},{"group":"Safe migrations","pages":[{"openapi":"post /organizations/{organization}/databases/{database}/branches/{branch}/safe-migrations","title":"Enable safe migrations for a branch","href":"/api/reference/enable_safe_migrations"},{"openapi":"delete /organizations/{organization}/databases/{database}/branches/{branch}/safe-migrations","title":"Disable safe migrations for a branch","href":"/api/reference/disable_safe_migrations"}]},{"group":"Workflows","pages":[{"openapi":"get /organizations/{organization}/databases/{database}/workflows","title":null,"href":"/api/reference/list_workflows"},{"openapi":"post /organizations/{organization}/databases/{database}/workflows","title":null,"href":"/api/reference/create_workflow"},{"openapi":"get /organizations/{organization}/databases/{database}/workflows/{number}","title":null,"href":"/api/reference/get_workflow"},{"openapi":"delete /organizations/{organization}/databases/{database}/workflows/{number}","title":null,"href":"/api/reference/workflow_cancel"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/complete","title":null,"href":"/api/reference/workflow_complete"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/cutover","title":null,"href":"/api/reference/workflow_cutover"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/retry","title":null,"href":"/api/reference/workflow_retry"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/reverse-cutover","title":null,"href":"/api/reference/workflow_reverse_cutover"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/reverse-traffic","title":null,"href":"/api/reference/workflow_reverse_traffic"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/switch-primaries","title":null,"href":"/api/reference/workflow_switch_primaries"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/switch-replicas","title":null,"href":"/api/reference/workflow_switch_replicas"},{"openapi":"patch /organizations/{organization}/databases/{database}/workflows/{number}/verify-data","title":null,"href":"/api/reference/verify_workflow"}]}]}]},{"tab":"CLI Reference","groups":[{"group":"Introduction","pages":[{"title":"PlanetScale CLI","sidebarTitle":"CLI overview","href":"/cli"}]},{"group":"Using the pscale CLI","pages":[{"title":"Agent setup prompt","sidebarTitle":"Agent setup prompt","href":"/agent-setup/prompt"},{"title":"PlanetScale CLI commands: agent-guide","sidebarTitle":"agent-guide","href":"/cli/agent-guide"},{"title":"PlanetScale environment set up","sidebarTitle":"Setting up CLI environment","href":"/cli/planetscale-environment-setup"},{"title":"Service tokens","href":"/cli/service-tokens"}]},{"group":"CLI command reference","pages":[{"title":"PlanetScale CLI","sidebarTitle":"CLI overview","href":"/cli"},{"title":"PlanetScale CLI commands: agent-guide","sidebarTitle":"agent-guide","href":"/cli/agent-guide"},{"title":"PlanetScale CLI commands: api","sidebarTitle":"api","href":"/cli/api"},{"title":"PlanetScale CLI commands: audit log","sidebarTitle":"audit-log","href":"/cli/audit-log"},{"title":"PlanetScale CLI commands: auth","sidebarTitle":"auth","href":"/cli/auth"},{"title":"PlanetScale CLI commands: backup","sidebarTitle":"backup","href":"/cli/backup"},{"title":"PlanetScale CLI commands: billing","sidebarTitle":"billing","href":"/cli/billing"},{"title":"PlanetScale CLI commands: branch","sidebarTitle":"branch","href":"/cli/branch"},{"title":"PlanetScale CLI commands: completion","sidebarTitle":"completion","href":"/cli/completion"},{"title":"PlanetScale CLI commands: connect","sidebarTitle":"connect","href":"/cli/connect"},{"title":"PlanetScale CLI commands: connections","sidebarTitle":"connections","href":"/cli/connections"},{"title":"PlanetScale CLI commands: database","sidebarTitle":"database","href":"/cli/database"},{"title":"PlanetScale CLI commands: deploy-request","sidebarTitle":"deploy-request","href":"/cli/deploy-request"},{"title":"PlanetScale CLI commands: import","sidebarTitle":"import","href":"/cli/import"},{"title":"PlanetScale CLI commands: insights","sidebarTitle":"insights","href":"/cli/insights"},{"title":"PlanetScale CLI commands: inspect","sidebarTitle":"inspect","href":"/cli/inspect"},{"title":"PlanetScale CLI commands: logs","sidebarTitle":"logs","href":"/cli/logs"},{"title":"PlanetScale CLI commands: keyspace","sidebarTitle":"keyspace","href":"/cli/keyspace"},{"title":"PlanetScale CLI commands: maintenance","sidebarTitle":"maintenance","href":"/cli/maintenance"},{"title":"PlanetScale CLI commands: lookup-vindex","sidebarTitle":"lookup-vindex","href":"/cli/lookup-vindex"},{"title":"PlanetScale CLI commands: materialize","sidebarTitle":"materialize","href":"/cli/materialize"},{"title":"PlanetScale CLI commands: metrics","sidebarTitle":"metrics","href":"/cli/metrics"},{"title":"PlanetScale CLI commands: move-tables","sidebarTitle":"move-tables","href":"/cli/move-tables"},{"title":"PlanetScale CLI commands: org","sidebarTitle":"org","href":"/cli/org"},{"title":"PlanetScale CLI commands: password","sidebarTitle":"password","href":"/cli/password"},{"title":"PlanetScale CLI commands: pgbouncer","sidebarTitle":"pgbouncer","href":"/cli/pgbouncer"},{"title":"PlanetScale CLI commands: ping","sidebarTitle":"ping","href":"/cli/ping"},{"title":"PlanetScale CLI commands: planned-reparent-shard","sidebarTitle":"planned-reparent-shard","href":"/cli/planned-reparent-shard"},{"title":"PlanetScale CLI commands: query-patterns","sidebarTitle":"query-patterns","href":"/cli/query-patterns"},{"title":"PlanetScale CLI commands: region","sidebarTitle":"region","href":"/cli/region"},{"title":"PlanetScale CLI commands: role","sidebarTitle":"role","href":"/cli/role"},{"title":"PlanetScale CLI commands: service-token","sidebarTitle":"service-token","href":"/cli/service-token"},{"title":"PlanetScale CLI commands: shell","sidebarTitle":"shell","href":"/cli/shell"},{"title":"PlanetScale CLI commands: signup","sidebarTitle":"signup","href":"/cli/signup"},{"title":"PlanetScale CLI commands: size","sidebarTitle":"size","href":"/cli/size"},{"title":"PlanetScale CLI commands: sql","sidebarTitle":"sql","href":"/cli/sql"},{"title":"PlanetScale CLI commands: traffic-control","sidebarTitle":"traffic-control","href":"/cli/traffic-control"},{"title":"PlanetScale CLI commands: vdiff","sidebarTitle":"vdiff","href":"/cli/vdiff"},{"title":"PlanetScale CLI commands: vtctl","sidebarTitle":"vtctl","href":"/cli/vtctl"},{"title":"PlanetScale CLI commands: webhook","sidebarTitle":"webhook","href":"/cli/webhook"},{"title":"PlanetScale CLI commands: workflow","sidebarTitle":"workflow","href":"/cli/workflow"}]}]}]},"basePath":"","title":"Python autocommit handshake correction - PlanetScale","buildId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","deploymentId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","dynamics":[],"chunks":[]}