Sql 如何使用python在红移中运行真空?
获取错误:Sql 如何使用python在红移中运行真空?,sql,python-2.7,amazon-redshift,Sql,Python 2.7,Amazon Redshift,获取错误: 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(
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
,因此代码开始事务,然后执行查询
虽然我不完全理解(如果需要运行真空,为什么要选择),您在这里尝试做什么,但我不会详细介绍。下面是适用于表1
的简化代码
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();
编辑2018年6月13日
为多个表进行真空操作的代码。这可以增强为从DB/text文件/CSV/property文件等读取表名
tables = ["sales", "sales", "tab3", "tab3"];
i = 0
while i < len(tables):
cur.execute('vacuum ' + tables[i])
print('success ' + tables[i])
i += 1
tables=[“sales”、“sales”、“tab3”、“tab3”];
i=0
而我(表):
当前执行('vacuum'+表[i])
打印('success'+表[i])
i+=1
您没有正确地迭代数据帧中的行。在这个链接中可以找到几个迭代数据帧行的好方法:为了自动化真空过程,我创建了以下代码。是的,现在我清除了那个错误,但现在得到了不同的错误。TypeError:DataFrame对象不是迭代器,如果它工作,您可以接受这个答案。如果有其他问题,你可能想问不同的问题。
tables = ["sales", "sales", "tab3", "tab3"];
i = 0
while i < len(tables):
cur.execute('vacuum ' + tables[i])
print('success ' + tables[i])
i += 1