python

时间:2015-05-27 05:58:43

标签: python postgresql pg-dump

我有一个ubuntu远程服务器说172.123.342.12。我想通过python脚本在我的本地机器上备份postgresql数据库。

我的剧本是:

def backUp(self):
        Pass = 'fb2024d4'
        os.putenv("PGPASSWORD",Pass)
        dt = datetime.now()
        format = "%Y_%b_%d"
        cur_time = dt.now()
        form_time = cur_time.strftime(format)
        backup_str = "C:\\Bitnami\\odoo-8.0-7\\postgresql\\bin\\pg_dump.exe --format=c -h 172.123.342.12 -p 5432 -d new_db -U bn_openerp > C:\\Users\\n\\Desktop\\Odoo_Backups\\%s.dump" %form_time
        os.system(backup_str)
        print ("Backup Created in Desktop")
        box.showinfo("Information", "Backup Created")

backup()

它什么都不做。一些帮助将不胜感激。

编辑:当我使用管理员帐户时,脚本在Windows上的数据库上工作。所以它不要求密码。但是当我尝试从远程ubuntu服务器备份数据库时。它要求输入密码。 我尝试过以下解决方案:

1.) SET PGPASSPASSWORD = C:\foo\bar..\pgpass.conf.
2.) os.putenv("PGPASSWORD","password")
3.) PGPASSWORD='password' pg_dump.exe -h localhost.....

没有人为我工作。

1 个答案:

答案 0 :(得分:0)

我能够使用python脚本使用pg_dump.exe创建转储文件:

filename = 'C:/Path/To/File/mydb_dump.sql'
pgDump = 'C:/Program Files/PostgeSQL/9.5/bin/pg_dump'

subprocess.Popen('"{}" -h 127.0.0.1 dbname > "{}"'.format(pgDump, filename), shell=True)


有几点需要注意:

我强烈反对使用 shell=True !!!

根据documentation,可能有贝壳注射存在巨大的安全隐患。

我不确定是否可以使用远程 Ubuntu服务器,但如果所有权限和共享都设置正确,我无法理解为什么不能。



我知道这很老了,但我希望它有所帮助。