通过python执行的红移查询不提供任何记录

通过python执行的红移查询不提供任何记录,python,sqlalchemy,amazon-redshift,psycopg2,Python,Sqlalchemy,Amazon Redshift,Psycopg2,我编写了下面的查询,将通过Python执行 query="""SELECT DISTINCT count(*) FROM PG_TABLE_DEF WHERE schemaname='master' AND tablename LIKE '%%tmp%%'; """ #print(query) conn=func_redshiftconnection() res=conn.execute(sqlalchemy.text(query)) res=res.fetchall() print(res

我编写了下面的查询,将通过Python执行

query="""SELECT DISTINCT count(*) FROM PG_TABLE_DEF WHERE schemaname='master'  AND tablename LIKE '%%tmp%%'; """
#print(query)

conn=func_redshiftconnection()
res=conn.execute(sqlalchemy.text(query))
res=res.fetchall()
print(res)                # Prints (0,)
它在数据库中运行良好,但当我使用
psycopg2
通过Python和SqlAlchemy执行它时,结果为0


我不明白可能是什么问题。感谢阅读红移中的PG_TABLE_DEF,它只返回用户可见的表的相关信息,换句话说,它只会显示在变量搜索路径中定义的模式中的表。如果PG_TABLE_DEF未返回预期结果,请验证search_path参数设置是否正确,以包括相关架构。
来源-

试试这个-

mydb=# set search_path="$user",master;
然后运行查询-

mydb=# select tablename from pg_table_def where schemaname = 'master';

如果我做了一个错误的假设,请评论,我将重新关注我的答案。

可能是一些字符需要转义。您能否尝试一个更简单的查询,例如
选择42
,看看它是否有效?如果是这样的话,那只是调试您的特定查询的问题。@JohnRotenstein
SELECT 42
非常有效,现在只需继续处理您的完整查询。例如,尝试从PG_TABLE_DEF中选择计数(*),然后一次添加位,直到其中断。我猜这可能是您的百分比符号,但这需要您进行测试。在
where
子句中,schemaname='public'获取结果。但当模式名称为“master”时,情况并非如此。我不明白为什么。如果你直接访问数据库有效吗?您是否对两个连接使用相同的凭据?您可能必须查看错误。谢谢。我会试试这个,然后再联系你非常感谢你@Rahul。这起作用了。而且我还意识到它只在集合会话中运行。这很有魅力!再次感谢:)