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)
args2 = (AsIs(schema), AsIs(table_name[0]), AsIs(new_owner))
因此,我正在研究 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)
args2 = (AsIs(schema), AsIs(table_name[0]), AsIs(new_owner))