Je souhaite que mon script python lise les données de la base de données GCP, mais je ne sais pas comment établir une connexion.
En général, lorsque nous nous connectons à la base de données locale, nous faisons quelque chose comme ceci:
dialect+driver://username:password@host:port/database
présentation de base pour se connecter à une base de données locale:
from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres:password@localhost:5432/django_app')
data = pd.read_sql_query('select * from "ABC"', con=engine)
mais comment puis-je faire de même avec la base de données résidant sur GCP. Dois-je transmettre le nom de mon instance au lieu de localhost?
4 Réponses :
vous pouvez suivre cette documentation et ci-dessous en fait partie.
# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
# Equivalent URL:
# mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
sqlalchemy.engine.url.URL(
drivername='mysql+pymysql',
username=db_user,
password=db_pass,
database=db_name,
query={
'unix_socket': '/cloudsql/{}'.format(cloud_sql_connection_name)
}
),
# ... Specify additional properties here.
# ...
}
(psycopg2.OperationalError) n'a pas pu traduire le nom d'hôte "/ cloudsql / INSTANCE_NAME" en adresse: Hôte inconnu Cette erreur a été reçue
pouvez-vous également poster le code et la sortie, je peux mieux vous aider.
assurez-vous que les proxys et l'accès Internet appropriés sont définis sur la machine sur laquelle vous l'exécutez.
import sqlalchemy depuis sqlalchemy import create_engine db = sqlalchemy.create_engine (sqlalchemy.engine.url.URL (drivername = 'postgresql', username = "postgres", password = "password", database = "postgres", query = { 'hôte': '/cloudsql/{}'.format("Instance_name ")}))
remplacez la chaîne nom_instance par le nom d'instance réel du serveur '/cloudsql/{}'.format("your_actual_db_server_name ")}
continuons cette discussion dans le chat .
Je l'ai fait mais évidemment je ne peux pas vous montrer, c'est pourquoi j'ai remplacé mon nom d'instance réel par Instance_name
votre instance est-elle accessible au public ou accessible depuis votre réseau privé?
Nous pouvons nous y connecter en remplaçant simplement host: port par l'adresse IP publique
engine = create_engine('postgresql://postgres:password@<public IP address>/postgres')
# dialect+driver://username:password@publicIPaddress/database
engine = create_engine('postgresql://postgres:password@<public IP address>/postgres')
Vous devrez suivre les étapes ci-dessous pour vous connecter à votre base de données postgres, si elle est installée sur une instance de VM Google Cloud Platform:
postgres et dans le champ Protocols and Ports , sélectionnez tcp et entrez le numéro de port 5432 (puisque vous êtes en utilisant le port par défaut comme mentionné dans votre message) et créez-le. postgres et enregistrez les modifications. engine = create_engine ('postgresql: // postgres: password @
vous devez remplacer localhost par l'IP de l'instance @Rahul Sharma
J'ai fait cela et cela jette cette erreur
OperationalError: (psycopg2.OperationalError) n'a pas pu se connecter au serveur: La connexion a expiré (0x0000274C / 10060) Le serveur fonctionne-t-il sur l'hôte "Instance_IP_address" et accepte les connexions TCP / IP sur le port 5432 ?Avez-vous réussi à résoudre le problème?
@WebDev .. Oui mais je l'ai fait moi-même
Ok, qu'est-ce qui a résolu le problème pour vous? Cela serait utile pour les autres confrontés au même problème.