Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用python在红移中运行真空?_Sql_Python 2.7_Amazon Redshift - Fatal编程技术网

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