Python SQL Запрос на PostgreSQL БД, размещенный в ElepantSQL - PullRequest
0 голосов
/ 29 марта 2020

У меня проблема с выполнением моих SQL запросов на хосте Postgres Elephant Sql: это мой код для подключения (кроме динамо, пользователя, пароля, которые заменяются на XXX

DATABASE_URL = 'postgres://YYYY:ZZZZ@drona.db.elephantsql.com:5432/YYYY'
# ----------------------------  CONNECT ELEPHANT DB
def ElephantConnect():

    up.uses_netloc.append("postgres")
    url = up.urlparse(DATABASE_URL)
    conn = psycopg2.connect(dbname='YYYY',
                            user='YYYY',
                            password='ZZZZ',
                            host='drona.db.elephantsql.com',
                            port='5432'
                            )

    cursor = conn.cursor()
    # cursor.execute("CREATE TABLE notes(id integer primary key, body text, title text);")
    #conn.commit()

    # conn.close()
    return conn 

кажется, что этот код хорошо соединяется с db

Моя проблема возникает, когда я хочу удалить таблицу:

def update(df, table_name, deleteYes= 'Yes'):

    conn = ElephantConnect()
    db = create_engine(DATABASE_URL)
    cursor =conn.cursor()

    if deleteYes == 'Yes': # delete
        queryCount = "SELECT count(*) FROM {};".format(table_name)

        queryDelete = "DELETE FROM {};".format(table_name)
        count = db.execute(queryCount)
        rows_before = count.fetchone()[0]
        try:
            db.execute(queryDelete)

            logging.info('Deleted {} rows into table {}'.format(rows_before, table_name))
        except:
            logging.info('Deleted error into table {}'.format(table_name))
    else:
        pass

Кажется, что когда я запускаю db.execute (queryDelete), он идет за исключением. У меня нет сообщения об ошибке. Но запрос с данными подсчета работает ... спасибо

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, что причина ошибки в том, что против таблицы есть внешние ключи. Чтобы быть уверенным, назначьте исключение в переменную и напечатайте его:

except Exception as ex:
    print(ex)

Кстати, если вы хотите быстро удалить все строки из таблицы, тогда будет гораздо эффективнее truncate таблица вместо удаления всех строк: truncate table table_name

Удаление более полезно, если вы хотите удалить строки при некоторых условиях: delete from table_name where ...

...