如果有人可以幫助我解決以下問題,我會很高興:
概括
我在一個新創建的 GCP 專案中,我正在嘗試從App Engine(python 應用程式)連接到Cloud SQL(postgresql 實體)。但我收到一個錯誤:
OperationalError: (psycopg2.OperationalError) connection to server on socket "/cloudsql/<project_id>:southamerica-east1:test-instance/.s.PGSQL.5432" failed: Connection refused
python 應用程式/App Engine(標準環境)
該應用程式是一個使用FastAPI. 它sqlmodel/sqlalchemy用于處理資料庫和psycopg2-binary作為配接器。這是連接到資料庫并創建表的代碼:
import sqlalchemy
from sqlmodel import create_engine
connection_name = "<project_id>:southamerica-east1:test-instance" # Here I omitted the real project id
url = sqlalchemy.engine.url.URL.create(
drivername="postgresql psycopg2",
username="some-username",
password="some-password",
database="some-database-name",
connection_name = connection_name,
query={"host": "{}/{}".format("/cloudsql", connection_name)},
)
engine = create_engine(url)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
奇怪的是,我過去成功地將同一個應用程式部署到App Engine(幾個月前,在另一個專案和該應用程式的舊版本中)并且它正在連接到Cloud SQL. 據我說,在這兩種情況下,我都使用了相同的連接代碼。
擴展錯誤
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server:
Connection refused
Is the server running locally and accepting
connections on Unix domain socket
"/cloudsql/<project_id>:southamerica-east1:test-instance/.s.PGSQL.5432"?
Background on this error at: https://sqlalche.me/e/14/e3q8)
筆記/我嘗試過的事情
- 我可以
Cloud SQL從本地連接到資料庫pgAdmin 4。 - 如果我洗掉了應用程式的資料庫部分,應用程式將被
App Engine正確部署。 - 我試過使用
psycopg2而不是psycopg2-binary. - 我已經嘗試重新啟動/關閉云 sql 實體。
- 我嘗試過使用不同的配接器,一個異步的(雖然我不是這樣,因為正如我之前提到的,我能夠在使用之前進行部署
psycopg2)
uj5u.com熱心網友回復:
概括
問題是我禁用了 Cloud SQL Admin API。我激活了它,它起作用了。
細節
我只是通過本地控制臺查看日志,使用命令gcloud app logs tail -s default,我能看到的唯一錯誤是我在原始問題中發布的錯誤。
但是,按照@kurtisvg 的建議,我直接通過 GCP 控制臺檢查了 App Engine 日志,然后出現了另一個錯誤。錯誤是Error 403: Cloud SQL Admin API has not been used in project before or it is disabled.。我按照說明進行操作,并且成功了。
@kurtisvg 再次感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491246.html
標籤:Python PostgreSQL 谷歌应用引擎 sqlalchemy 谷歌云 sql
