我正在尝试做一些非常简单的可行的事情,但不是我期望的那样。我有一个包含各种表的数据库,对于每个表,我都试图从信息模式中提取列名。我正在使用下面的代码,所有内容都像一个超级按钮(python):
import psycopg2 as pgsql
# code to connect and generate cursor
table = 'some_table_name'
query = 'SELECT column_name FROM information_schema.columns WHERE table_name = %s'
cursor.execute(query, (table,))
result = pd.DataFrame(cursor.fetchall())
print(result)
到目前为止,太好了。当我用以下内容替换查询变量时出现问题:
import psycopg2 as pgsql
# code to connect and generate cursor
table = 'some_table_name'
**query = 'SELECT column_name FROM information_schema.columns WHERE table_name='+table
cursor.execute(query)**
result = pd.DataFrame(cursor.fetchall())
print(result)
如果我打印声明,那是正确的:
SELECT column_name FROM information_schema.columns WHERE table_name=some_table_name
但是,当我运行查询时,我收到此错误消息:
UndefinedColumn: column "some_table_name" does not exist
LINE 1: ... FROM information_schema.columns WHERE table_name=some_tabl...
some_table_name是作为WHERE子句的参数的表名,而不是列名。怎么可能呢?
谢谢!
答案 0 :(得分:0)
您的问题是您没有将some_table_name放在引号中,因此将其视为列名,而不是字符串文字。为什么不坚持既可行又符合psycopg文档的第一种方法?