将SQL查询结果作为python中的变量返回

时间:2015-10-06 17:29:03

标签: python postgresql psycopg2 amazon-redshift

所以,我正在使用python脚本来从redshfit中的特定列中获取所有行。我们的想法是在第二个SQL命令中循环遍历列中的每个项目以进行更改。例如,我想从特定模式中提取表名,然后执行ALTER TABLE来更改每个表的所有者。这是我的代码:

def alter_table(schema,new_owner):
    select = "SELECT talbe_name FROM information_schema.tables WHERE talbe_schema = %s"
    args = (schema,)
    cur.execute(select,args)
    for table_name in cur:
        print table_name
        alter = "ALTER TABLE %s.%s OWNER TO %s"
        args2 = (table_name,schema,new_owner)
        cur.execute(alter,args2)
        cur.conn.commit()

现在,这个几乎有效。我遇到的问题是传递" table_name"从select语句到alter语句。 select语句在print命令中给出以下输出:

('TABLE_NAME',)

然后传递给alter语句,如:

 ALTER TABLE ('TABLE_NAME',).schema OWNER TO new_Owner

然后alter语句失败:

 syntax error at or near "("

我认为需要发生的事情是需要删除select语句中的特殊字符,以便在没有它们的情况下传递TABLE_NAME。显然我的谷歌搜索技能缺少一些东西,所以任何想法都会有所帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

您应该使用table_name[0],因为table_nametuple,您想要的字符串位于索引0。

所以让它像

args2 = (table_name[0],schema,new_owner)

答案 1 :(得分:0)

AsIs

args2 = (AsIs(schema), AsIs(table_name[0]), AsIs(new_owner))