gpt4 book ai didi

postgresql - GCP 部署数据库连接错误 : Can't create a connection to host

转载 作者:行者123 更新时间:2023-12-05 05:45:25 24 4
gpt4 key购买 nike

我正在尝试将我的 Flask 应用程序部署到 GCP。但是我的数据库连接不工作。

我已经尝试了不同的方法,但都奏效了。我还在本地设置了数据库连接,并且能够在 Google SQL 上写入信息,但是当我部署应用程序时,字符串根本不起作用。

这是我的部分代码:

from flask import Flask, send_from_directory, render_template, request, redirect, url_for
from sqlalchemy import cast, String
import psycopg2
from model import db, Contacts, Testimonials
from forms import ContactForm, SearchContactForm
from secrets import token_hex
from werkzeug.utils import secure_filename, escape, unescape
from datetime import datetime
import os
import dateutil.parser


root_dir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
db.init_app(app)

debug_mode = False

if debug_mode:
# Dev environment
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
app.debug = True
# Define the database
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@public_ip_address/dbname'
else:
# Production environment
app.debug = False
# Define the database
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+pg8000://postgres:password@public_ip_address/dbname'

要进行部署,我正在使用来自云 Shell 的命令 gcloud app deploy,效果非常好。实际上,我可以渲染与数据库连接无关的网站部分。

我得到的错误是:

pg8000.exceptions.InterfaceError:无法创建到主机 {public_ip_address} 和端口 5432 的连接(超时为 None,source_address 为 None)。

最佳答案

我建议使用 Cloud SQL Python Connector管理您的连接并为您处理连接字符串。它支持 pg8000 驱动程序,应该可以帮助您解决问题,因为它可以在本地和 GCP(Cloud Functions、Cloud Run 等)中运行

以下示例代码展示了如何使用连接器访问 GCP Cloud SQL 数据库。

from google.cloud.sql.connector import connector
import sqlalchemy

# configure Cloud SQL Python Connector properties
def getconn() ->:
conn = connector.connect(
"project:region:instance",
"pg8000",
user="YOUR_USER",
password="YOUR_PASSWORD",
db="YOUR_DB"
)
return conn

# create connection pool to re-use connections
pool = sqlalchemy.create_engine(
"postgresql+pg8000://",
creator=getconn,
)

# query or insert into Cloud SQL database
with pool.connect() as db_conn:
# query database
result = db_conn.execute("SELECT * from my_table").fetchall()

# Do something with the results
for row in result:
print(row)

有关更详细的示例,请参阅 README存储库的。

关于postgresql - GCP 部署数据库连接错误 : Can't create a connection to host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71398121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com