使用Python连接到AWS RDS Postgres数据库

19

我在 RDS 中有一个名为 my-rds-table-name 的 Postgres 表。

我使用以下只读用户配置通过 pgAdmin4 连接到它:

host_name = "my-rds-table-name.123456.us-east-1.rds.amazonaws.com"
user_name = "my_user_name"
password = "abc123def345"

我已经验证了我可以对表进行查询。

然而,我无法使用Python连接到它:

SQLAlchemy==1.2.16
psycopg2-binary==2.7.6.1
mysqlclient==1.4.1

使用:

import psycopg2
engine = psycopg2.connect(
    database="my-rds-table-name",
    user="my_user_name",
    password="abc123def345",
    host="my-rds-table-name.123456.us-east-1.rds.amazonaws.com",
    port='5432'
)

它失败了

psycopg2.OperationalError: FATAL:  database "my-rds-table-name" does not exist

同样地,如果我尝试使用sqlalchemy连接它:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL:  database "my-rds-table-name" does not exist

我错过了什么?


3
my-rds-table-name 是数据库实例(服务器)的名称。在数据库实例中,存在一个逻辑数据库,但该逻辑数据库的名称并不是 my-rds-table-name。您可以使用 RDS 控制台来发现实际的数据库名称。 - John Rotenstein
2个回答

31

感谢John Rotenstein的评论。

正如他所指出的,my-rds-table-name是数据库实例名称,而不是数据库名称,默认数据库名称为postgres

import psycopg2
engine = psycopg2.connect(
    database="postgres",
    user="my_user_name",
    password="abc123def345",
    host="my-rds-table-name.123456.us-east-1.rds.amazonaws.com",
    port='5432'
)

1

使用SQLAlchemy,您可以执行以下操作:

engine = create_engine('postgresql://postgres:postgres@<AWS_RDS_end-point>:5432/postgres')

然后您可以更新数据库。 例如:

df = pd.DataFrame({'A': [1,2], 'B':[3,4]})
df.to_sql('tablename', engine, schema='public', if_exists='append', index=False)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接