如何使用python在redshift中运行VACUUM?

时间:2018-06-13 08:13:14

标签: sql python-2.7 amazon-redshift

  

获取错误:

next(df)

TypeError:DataFrame对象不是迭代器

这是代码。

import pandas as pd
import os
import sys
import psycopg2
import csv



def redshift():

conn=psycopg2.connect(dbname= 'sdsdf', host='rghgj', 
    port= '5439', user= 'admin', password= 'assddfd')
df=pd.read_sql('select table_name from vacuum_process where vacuum_enable=1',conn)
conn.autocommit=True
print df
next(df)

    for i in df:

         curr=conn.cursor()
         query= "vacuum  %s "% i
         curr.execute(query)
         print 'success'

redshift()

2 个答案:

答案 0 :(得分:0)

您缺少在连接中设置isolation_level=0,因此代码开始执行事务然后执行查询。

虽然我不完全理解(为什么选择是否需要运行真空),你在这里尝试做什么,但我不会详细介绍。以下是适用于table1的简单代码。

import psycopg2



def redshift():

    conn=psycopg2.connect(dbname= 'a', host='host', port= '5439', user= 'user_name', password= '****')
    conn.set_isolation_level(0)
    cur = conn.cursor();

    cur.execute('vacuum table1')
    print('success')


redshift();

编辑13/6/2018

为多个表做Vaccum的代码。这可以增强,以从DB /文本文件/ CSV /属性文件等中读取表名。

tables = ["sales", "sales", "tab3", "tab3"];

i = 0

while i < len(tables):
    cur.execute('vacuum ' + tables[i])

    print('success ' + tables[i])
    i += 1

答案 1 :(得分:0)

您没有正确迭代DataFrame中的行。可以在以下链接中找到几种迭代DataFrame行的好方法:How to iterate over DataFrame rows