Return SQL 查询结果作为 python 中的变量

Return SQL Query results as a variable in python

因此,我正在研究 python 脚本以从 redshfit 中的特定列中获取所有行。这个想法是然后在第二个 SQL 命令中循环遍历列中的每个项目以进行更改。例如,我正在考虑从特定模式中提取 table 名称,然后执行 ALTER TABLE 来更改每个 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 语句在打印命令中给出以下输出:

('TABLE_NAME',)

然后传递给 alter 语句,如:

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

然后 alter 语句失败:

 syntax error at or near "("

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

你应该使用 table_name[0],因为 table_name 是一个 tuple 并且你想要的字符串在索引 0.

所以让它像

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

AsIs

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