获取错误:
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()
答案 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