我已经尝试过这个:
@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 我怎么能掉下来?
答案 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]))