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.