Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

If you are encountering an OperationalError "could not connect to server: Connection refused" in psycopg2 while trying to store a data frame into a PostgreSQL database, it means that there is an issue establishing a connection between your code and the database. Here are some steps you can follow to resolve the issue:

  1. Check if the PostgreSQL server is running: Make sure that the PostgreSQL server is running and accepting connections. You can check this by running the following command in the terminal:

    $ sudo systemctl status postgresql
    

    If the status of the PostgreSQL service is "inactive", then start the service using the command:

    $ sudo systemctl start postgresql
    
  2. Check the connection details: Make sure that you are using the correct connection details such as the host, port, username, and password. Double-check these details in your code and make sure that they match the configuration of your PostgreSQL server.

  3. Check the firewall settings: If you are running a firewall on your system, make sure that it is properly configured to allow connections to the PostgreSQL server on the specified port.

  4. Modify the PostgreSQL configuration: If none of the above steps work, you can try modifying the PostgreSQL configuration file to allow remote connections. This involves making changes to the pg_hba.conf and postgresql.conf configuration files.

Once you have resolved the issue with the connection, you can use the following code to store your data frame into a PostgreSQL database:

import psycopg2
import pandas as pd

# Define the connection parameters
conn_params = {
    "host": "localhost",
    "port": 5432,
    "database": "mydatabase",
    "user": "myuser",
    "password": "mypassword"
}

# Establish a connection to the database
conn = psycopg2.connect(**conn_params)

# Define the table name and create the table
table_name = "mytable"
create_table_query = "CREATE TABLE IF NOT EXISTS {} (col1 text, col2 text)".format(table_name)
with conn.cursor() as cur:
    cur.execute(create_table_query)
    conn.commit()

# Load the data frame into the database
df = pd.read_csv("mydata.csv")
with conn.cursor() as cur:
    for index, row in df.iterrows():
        insert_query = "INSERT INTO {} (col1, col2) VALUES (%s, %s)".format(table_name)
        cur.execute(insert_query, (row["col1"], row["col2"]))
        conn.commit()

# Close the connection
conn.close()

This code establishes a connection to the PostgreSQL database using the psycopg2 library, creates a table if it does not exist, and loads the data from a CSV file into the database using a loop to iterate through the rows of the data frame. Finally, the connection is closed with the conn.close() command.