使用Python检查PostgreSQL表中是否存在列

使用Python检查PostgreSQL表中是否存在列,python,postgresql,Python,Postgresql,我花了很长时间寻找答案,并做了以下工作: (一) (二) (三) 但一切都不起作用。。。错误总是: column "Tom" does not exist 因为它确实不存在,我只想检查它是否存在。感谢您的帮助。请记住: 你没有引用你的字符串 一旦进入PostgreSQL,您的查询如下所示: SELECT COUNT(*) FROM Table WHERE user_name = Tom 将user\u name列与不存在的Tom列进行比较 您需要的是这样一个查询: SELECT COUNT(

我花了很长时间寻找答案,并做了以下工作:

(一)

(二)

(三)

但一切都不起作用。。。错误总是:

column "Tom" does not exist
因为它确实不存在,我只想检查它是否存在。感谢您的帮助。

请记住:


你没有引用你的字符串

一旦进入PostgreSQL,您的查询如下所示:

SELECT COUNT(*) FROM Table WHERE user_name = Tom
user\u name
列与不存在的
Tom
列进行比较

您需要的是这样一个查询:

SELECT COUNT(*) FROM Table WHERE user_name = 'Tom'
cursor = conn.cursor()
query = 'SELECT COUNT(*) FROM %s WHERE user_name = %%s' % table_name
cursor.execute(query, user_name)
要做到这一点,您应该使用参数化语句,以避免任何SQL注入的可能性。使用DBAPI模块,它的简单功能如下:

cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM Table WHERE user_name = %s', user_name)
如果您需要表名也是动态的,那么您必须按照以下方式构造它:

SELECT COUNT(*) FROM Table WHERE user_name = 'Tom'
cursor = conn.cursor()
query = 'SELECT COUNT(*) FROM %s WHERE user_name = %%s' % table_name
cursor.execute(query, user_name)

但是您需要绝对确定表名是有效的。任何能够控制该变量的人都可以对您的数据库做任何事情。

。。错误消息字符串是什么?语法是try:except:else:right?嗯,
Exception
是一个坏习惯,我没有一个postgres来测试产生了什么错误。我将尝试找到它并改进我的答案。我在我的代码中添加了try:except:else:但它仍然给我提供了
列“Tom”不存在的错误。。你知道怎么处理吗?谢谢你试过这个吗@ronak是的,我尝试过..仍然
列“Tom”不存在
错误..您使用的是什么数据库连接库?我尝试过,它给出了错误:
列“information\u table”不存在
其中information\u table是我的表名。我检查过了,这个表已经创建好了。有什么想法吗?在我的查询中,
query=“SELECT COUNT(*)FROM%s,其中user\u name=%s”%(table\u name,username)
,table\u name和username已经是字符串了。这就像
table\u name=“information\u table”
username=“Tom”
…这是“像”一样的,或者说这是发送到数据库的实际查询?我强烈怀疑不是这样。如果用Python打印repr(username)
会得到什么?我想这就是问题所在…我确实犯了一些错误,比如
username=Tom
。所以实际上我把句子
“SELECT COUNT(*)从%s中的username=%s”%(table\u name,username)
改为
“SELECT COUNT(*)从%s中的username='%s'(table\u name,username)
,问题得到了解决。。。
SELECT COUNT(*) FROM Table WHERE user_name = 'Tom'
cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM Table WHERE user_name = %s', user_name)
cursor = conn.cursor()
query = 'SELECT COUNT(*) FROM %s WHERE user_name = %%s' % table_name
cursor.execute(query, user_name)