Add SQLAlchemy 2 and psycopg3 to your
requirements.txt file.
psycopg~=3.1.8sqlalchemy~=2.0.1
Specify postgresql+psycopg, localhost and 5432 as the database dialect,
driver, server host and port in the SQLAlchemy 2 connection string.
psycopg3 requires a username and password in the connection
string. PGAdapter ignores these.
Optionally, specify a different port number if PGAdapter is
configured to listen on a port other than the default PostgreSQL
port (5432).
Use SQLAlchemy 2 with PostgreSQL-dialect databases
For more information about the features and recommendations for
SQLAlchemy 2 with PostgreSQL-dialect databases, please consult the
reference documentation
on GitHub.
What's next
Check out the sample-application using
SQLAlchemy 2 with PGAdapter and Spanner.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[],[],null,["# Integrate Spanner with SQLAlchemy 2 ORM (PostgreSQL dialect)\n\n[SQLAlchemy 2](https://docs.sqlalchemy.org/en/20/) is a Python SQL toolkit and Object\nRelational Mapper (ORM).\n\nYou can use the SQLAlchemy 2 ORM in combination with\nthe standard [PostgreSQL psycopg3 driver](https://www.psycopg.org/psycopg3/) and PGAdapter.\n\nSet up SQLAlchemy 2 with Spanner PostgreSQL-dialect databases\n-------------------------------------------------------------\n\n1. Ensure that PGAdapter is running on the same machine as the\n application that is connecting using SQLAlchemy 2 with Spanner.\n\n For more information, see [Start PGAdapter](/spanner/docs/pgadapter-start).\n2. Add SQLAlchemy 2 and psycopg3 to your\n `requirements.txt` file.\n\n psycopg~=3.1.8\n sqlalchemy~=2.0.1\n\n3. Specify `postgresql+psycopg`, `localhost` and `5432` as the database dialect,\n driver, server host and port in the SQLAlchemy 2 connection string.\n psycopg3 requires a username and password in the connection\n string. PGAdapter ignores these.\n\n Optionally, specify a different port number if PGAdapter is\n configured to listen on a port other than the default PostgreSQL\n port (5432). \n\n conn_string = \"postgresql+psycopg://user:password@localhost:5432/my-database\"\n engine = create_engine(conn_string)\n\nSee the [SQLAlchemy 2 with PostgreSQL documentation](https://docs.sqlalchemy.org/en/20/dialects/postgresql.html#dialect-postgresql)\nfor more connection options for PostgreSQL.\n\nUse SQLAlchemy 2 with PostgreSQL-dialect databases\n--------------------------------------------------\n\nFor more information about the features and recommendations for\nSQLAlchemy 2 with PostgreSQL-dialect databases, please consult the\n[reference documentation](https://github.com/GoogleCloudPlatform/pgadapter/blob/-/samples/python/sqlalchemy2-sample)\non GitHub.\n\nWhat's next\n-----------\n\n- Check out the [sample-application](https://github.com/GoogleCloudPlatform/pgadapter/blob/-/samples/python/sqlalchemy2-sample/sample.py) using SQLAlchemy 2 with PGAdapter and Spanner.\n- Learn more about [SQLAlchemy](https://docs.sqlalchemy.org/en/20/).\n- Learn more about [PGAdapter](/spanner/docs/pgadapter).\n- [File a GitHub issue](https://github.com/GoogleCloudPlatform/pgadapter/issues) to report a bug or ask a question about Spanner dialect for SQLAlchemy with PGAdapter."]]