Python дамп базы?

182 просмотра
0
0 Комментариев

По большому счету, вопроса у меня два. Но решают он общую задачу. Поэтому, простите, разделять их не буду.

Вот такой код:

con = psycopg2.connect(user='*', password='*', host='*', dbname='*', port=5432)
cur = con.cursor()
today = date.today()
month = today.replace(year=today.year - 1, month=today.month, day=today.day)
month = month.strftime("%Y-%m")
cur.execute('''select * from "SC_Tag"."tagdata_%s";'''% month)
ver = cur.fetchone()
print ver
try:
    dumpcmd ='''PGPASSWORD="*" pg_dump -h *.ru -p 5432 -U * -F p -E UTF8 -Z 9 -t "SC_Tag"."tagdata_2014-12" -v -f "D:\postgres\pg\my12.gzip" DB_ASUTP_2'''
    cur.execute('''DROP TABLE "SC_Tag"."tagdata_%s";'''% month)
    print 'lol'
except:
    print "I can't drop our test database!"
print cur.query

[/apcode]

Первое - не проходит удаление таблицы.

При этом он не ругается. Select проходит нормально. Права на удаление есть

Второе - не проходит dumpcmd.

Как вариант - нужно подключить файл с паролем. Но сейчас нет доступа к серверу, пишу на винде. Здесь вроде говорят что и так его указать можно. Но опять же - ошибки вообще нет.

В чем проблема?

попробовал

    cur.execute('''DROP TABLE "SC_Tag"."tagdata_%s";'''% month)
    cur.commit()
 
except psycopg2.DatabaseError, e:
    print 'Error %s' % e

получил

Traceback (most recent call last): File "D:/sql_python/load.py",
line 25, in
cur.commit() AttributeError: 'psycopg2._psycopg.cursor' object has no attribute 'commit'


Добавить комментарий

1 Ответы

Python Опубликовано 12.12.2018
0

Для того, чтобы удаление прошло надо закоммитить сессию

    cur.execute('''DROP TABLE "SC_Tag"."tagdata_%s";'''% month)
    print 'lol'
except:
    con.rollback()
    print "I can't drop our test database!"
con.commit()
print cur.query

Для того, чтобы заработал дамп базы добавте команду:

import os
....
r = os.popen(dumpcmd).read()

Не забудте заэкранировать слеши в dumpcmd.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up