1
votes

Créer un moteur (SQLalchemy) pour la base de données GCP dans un script python

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?


5 commentaires

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.


4 Réponses :


0
votes

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.
    # ...
}

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/cloud-sql/mysql/sqlalchemy/main.py


8 commentaires

(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é?



0
votes

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


0 commentaires

4
votes
engine = create_engine('postgresql://postgres:password@<public IP address>/postgres')    

0 commentaires

0
votes

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:

  1. Connectez-vous à console.cloud.google.com et sélectionnez le projet contenant votre instance de VM contenant la base de données.
  2. Déroulez le menu principal en haut à gauche et accédez à Paramètres réseau -> Réseau VPC -> Règles de pare-feu .
  3. Créez une nouvelle règle de pare-feu à l'aide du bouton en haut de la page.
  4. Donnez un nom à la règle, par exemple 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.
  5. Déroulez le menu principal en haut à gauche et accédez à Compute -> Compute Engine -> VM Instances .
  6. Sur la page Instances de VM qui s'affiche, notez l ' adresse IP externe de l'instance où réside votre base de données.
  7. Cliquez sur votre instance de VM, puis sur le bouton Modifier en haut.
  8. Dans le champ Balises réseau , ajoutez le nom de règle donné à l'étape 4 ci-dessus, à savoir. postgres et enregistrez les modifications.
  9. Démarrez maintenant votre instance de VM (vous devrez peut-être effectuer l'étape 6. pour vérifier à nouveau l ' IP externe si vous n'utilisez pas une IP externe statique)
  10. Vous pourrez désormais vous connecter à votre base de données en utilisant:

engine = create_engine ('postgresql: // postgres: password @ : 5432 / django_app')


0 commentaires