Таблицы, созданные с помощью sqlalcheny, не отображаются в Amazon RDS - PullRequest
1 голос
/ 13 июля 2020

Извинения, я новичок в этом и заранее благодарю вас за любые идеи. Я создаю таблицы Postgresql, используя sqlalchemy для Amazon RDS. Таблицы не отображаются, когда я пытаюсь использовать Quicksight или SQL Workbench. Код, который я использую (я также повторил движок, и все, кажется, работает):

from sqlalchemy import create_engine, inspect, text
import psycopg2
from sqlalchemy.types import Integer, Text, String, DateTime
    
ENDPOINT="db_instance_name.csnul5z77jon.us-east-1.rds.amazonaws.com"
PORT="5432"
USR="xxx"
PSSWD="xxx"
DBNAME="postgres"

    #conn_string = "host='localhost' dbname='my_database' user='postgres' password='secret'
conn_string = "postgresql://{}:{}@{}:{}/{}".format(USR, PSSWD, ENDPOINT, PORT, DBNAME)
print(conn_string)

    # create engine
try:
    
    engine = create_engine(conn_string)
    print("connection OK")
    
except Exception as e:
    print("Database connection failed due to {}".format(e))  

df_pull_check.to_sql(
    'popular_102',
    engine,
    schema = 'public',
    if_exists='replace',
    index=False,
    chunksize=500,
    dtype={
        "date": DateTime,
        "symbol": Text,
        "name":  Text,
        "start_popularity": Integer,
        "popularity_difference": Float       
    }
)

with engine.connect() as con:
    con.execute('ALTER TABLE popular_102 ADD COLUMN record_id SERIAL PRIMARY KEY')

Когда я проверяю имена таблиц, используя приведенный ниже код, появляется таблица popular_102:

 inspector = inspect(engine)
 table_names = inspector.get_table_names()
 print(table_names)

Я проверил, есть ли данные, используя приведенный ниже код, и это:

with engine.connect() as con:
    df_sql = pd.read_sql('SELECT * FROM popular_102', con)
    df_sql = pd.DataFrame(df_sql, con)

Я также изменил retrieve на append в to_sql в первый раздел кода выше только для того, чтобы вызвать ошибку, и ошибка действительно отображается в журнале AWS:

[12959]:ERROR: column "record_id" of relation "popular_102" already exists
2020-07-13 01:02:31 xxxxx@postgres:[12959]:STATEMENT: ALTER TABLE popular_102 ADD COLUMN record_id SERIAL PRIMARY KEY

Однако таблица никогда не достигает Amazon Quicksight или SQL Workbench. Я могу создать таблицу в SQL Workbench, commit to Amazon RDS и access it in Quicksight.

Есть мысли, что я делаю неправильно?

1 Ответ

1 голос
/ 13 июля 2020

Похоже, вы используете базу данных по умолчанию. Чтобы решить эту проблему, выполните следующий шаг:

  • Войдите в консоль RDS
  • Укажите начальное имя базы данных

Когда база данных будет готова принять соединение, используйте newly имя созданной базы данных, которое мы создали на шаге 2.

Вы можете подробнее изучить эту пошаговую статью

Обновите код, чтобы он указывал на новую базу данных

ENDPOINT="db_instance_name.csnul5z77jon.us-east-1.rds.amazonaws.com"
PORT="5432"
USR="xxx"
PSSWD="xxx"
DBNAME="mydb"
...