我如何使用python删除postgres数据库?

时间:2017-03-20 13:22:50

标签: python-2.7

我已经尝试过这个:

@api.multi
def get_database_list(self):
    self._cr.execute("SELECT (pg_stat_file('base/'||oid ||'/PG_VERSION')).modification, datname FROM pg_database")
    temp = []
    res=self._cr.fetchall()
    dt=datetime.utcnow() - timedelta(15)
    for i in res:
        dt1 = i[0].replace(tzinfo=None)
        if(dt1 < dt):
            result=self.env['ir.config_parameter'].search([('key','=','database.to.skip')])
            test=result.value.split(',')
            if i[1] not in test:
                try:
                    self._cr.connection.set_isolation_level(0)
                    temp.append((i[1]))
                    self._cr.execute("drop database %s"%(i[1]))
                    self._cr.connection.set_isolation_level(1)
                except Exception ,e:
                    print e
    print temp

在此代码中,只有哪个数据库被droped,该名称是下划线 我不能删除使用点名称的数据库,例如demo.test 我怎么能掉下来?

2 个答案:

答案 0 :(得分:0)

你需要使用&#34; quote_ident&#34;处理特殊字符。

尝试:

 self._cr.execute("drop database quote_ident(%s)"%(i[1]))

参考:Link

注意:如果有任何用户通过其他会话/连接进行连接,您将无法删除数据库。

答案 1 :(得分:0)

你需要在我已经提到的上述代码中加倍引用。 self._cr.execute("drop database \"%s\""%(i[1]))