【发布时间】:2016-01-03 17:28:04
【问题描述】:
所以,我正在使用 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()
现在,这几乎可以工作了。我遇到的问题是将 select 语句中的“table_name”传递给 alter 语句。 select 语句在打印命令中给出以下输出:
('TABLE_NAME',)
然后传递给 alter 语句,如:
ALTER TABLE ('TABLE_NAME',).schema OWNER TO new_Owner
alter 语句随后失败:
syntax error at or near "("
我认为需要发生的是需要删除 select 语句中的特殊字符,以便在没有它们的情况下传递 TABLE_NAME。显然我的谷歌搜索技能缺少一些东西,所以任何想法都会有所帮助。谢谢!
【问题讨论】:
标签: python postgresql psycopg2 amazon-redshift