在Python中检查PostgreSQL表是否存在(可能使用Psycopg2)

64 投票
9 回答
53770 浏览
提问于 2025-04-15 16:50

我想知道如何用Psycopg2这个Python库来检查一个表是否存在。我需要一个真或假的布尔值。

9 个回答

5

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,我们希望程序能做出反应。这种情况下,我们就会用到“事件”这个概念。

事件就像是一个信号,告诉程序某件事情发生了。比如,用户点击了按钮,或者输入了文字。这些都是事件。

当事件发生时,我们可以设置一些“监听器”,也就是程序的一部分,专门用来等待这些事件的发生。一旦事件发生,监听器就会被触发,执行我们预先设定好的代码。

这样,我们就能让程序根据用户的操作做出相应的反应,使得程序更加互动和友好。

希望这个解释能帮助你理解事件和监听器的基本概念!

select exists(select relname from pg_class 
where relname = 'mytablename' and relkind='r');
25

我对psycopg2这个库不太了解,不过可以用下面的查询来检查一个表是否存在:

SELECT EXISTS(SELECT 1 FROM information_schema.tables 
              WHERE table_catalog='DB_NAME' AND 
                    table_schema='public' AND 
                    table_name='TABLE_NAME');

使用information_schema比直接从pg_*表中选择数据有一个好处,就是这个查询在不同的数据库中更具可移植性,也就是说它可以在不同的环境下使用。

99

这样怎么样:

>>> import psycopg2
>>> conn = psycopg2.connect("dbname='mydb' user='username' host='localhost' password='foobar'")
>>> cur = conn.cursor()
>>> cur.execute("select * from information_schema.tables where table_name=%s", ('mytable',))
>>> bool(cur.rowcount)
True

使用EXISTS的另一种方法更好,因为它不需要获取所有的行,只需要确认至少有一行符合条件就可以了:

>>> cur.execute("select exists(select * from information_schema.tables where table_name=%s)", ('mytable',))
>>> cur.fetchone()[0]
True

撰写回答