测试PostgreSQL表是否不存在(使用psycopg2)

时间:2017-03-09 08:51:50

标签: python postgresql boolean psycopg2

使用Psycopg2,我需要测试postgresql表是否存在。

在类似的question中,建议使用以下测试:

cursor.execute("select exists(select * from myDb.mytable_%s)" % complementName)
tableExists = cursor.fetchone()[0]
print(tableExists)

如果表格已经存在,并且返回True,则效果很好,但如果表格 不存在 ,则无效。我没有像我需要的那样返回False,而是收到错误

  

ProgrammingError:关系“myDb.mytable_001”   不存在

我做错了什么?如果表不存在,我该怎么做以获得False语句?谢谢你的帮助!

修改

根据评论中的建议,我也尝试了:

tableExists = cursor.execute("SELECT 1 AS result FROM pg_database WHERE datname='mytable_001'")

tableExists = cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = 'mytable_001)')")

但两者都只返回None,表是否存在。但是,我不确定语法,也许你可以指出我可能会犯的一些新手错误?谢谢!

编辑2 最后,解决方案包含上述后一个查询的组合,并按如下方式获取布尔结果:

cursor.execute("SELECT EXISTS (SELECT 1 AS result FROM pg_tables WHERE schemaname = 'mySchema' AND tablename = 'mytable_001');")
tableExists = cursor.fetchone()[0]

2 个答案:

答案 0 :(得分:0)

您可以从以下信息模式中获取信息:

a

答案 1 :(得分:0)

您的查询似乎不正确。您应该提供要验证其是否存在的表名……还有许多方法可以验证表是否存在,为什么要使其如此复杂.....

SELECT table_name FROM information_schema.tables where table_schema = 'your schema name'并将输出存储在任何变量中,然后验证其是否为空...您应该没事。...

或使用

query = SELECT EXISTS (SELECT relname FROM pg_class WHERE relname = 'table 
name');
resp = cur.execute(query)
rows = cur.fetchone()
print(rows[0]) 

如果表存在则返回True,否则返回