使用psycopg2替代create_engine调用pd.read_sql获取DataFrame报错求助
问题原因及解决办法
核心原因
SQLAlchemy的create_engine连接对象被pandas识别后,pd.read_sql会自动把传入的表名补全成合法的SELECT * FROM 表名语句。但psycopg2是原生PostgreSQL连接,pandas不会做这个自动补全,直接把your_table_name当作SQL执行,PostgreSQL自然会报语法错误——单独的表名不是有效的SQL命令。
解决办法
把sql_query改成完整的SELECT查询语句即可:
import psycopg2 import pandas as pd db_url = "your_database_url_here" conn = psycopg2.connect(db_url) # 替换成完整的SQL查询语句 sql_query = "SELECT * FROM your_table_name" df = pd.read_sql(sql_query, con=conn)
如果需要动态指定表名,建议用参数化方式避免SQL注入(不要直接字符串拼接):
import psycopg2 import psycopg2.sql import pandas as pd db_url = "your_database_url_here" conn = psycopg2.connect(db_url) table_name = "your_table_name" # 使用psycopg2的标识符占位符自动处理表名的引号转义 sql_query = psycopg2.sql.SQL("SELECT * FROM {}").format(psycopg2.sql.Identifier(table_name)) df = pd.read_sql(sql_query, con=conn)
内容的提问来源于stack exchange,提问作者aryaroop04
相关产品推荐
相关产品推荐

