postgresql 在Pandas read_sql参数中使用模式和表参数

ehxuflar  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(229)

我想使用panda的read_sql()方法和参数select count(<column_name>) from <schema_name>.<table_name>;来运行查询select count(?) from ?.?;
我得到错误ValueError: ('Could not connect to db.', DatabaseError('Execution failed on sql \'select count(?) from ?.?;\': (\'42601\', \'[42601] ERROR: syntax error at or near "$2";\\nError while preparing parameters (1) (SQLExecDirectW)\')'))
我所拥有的代码正如您所期望的那样:

pd.read_sql('''select count(?) from ?.?;''', conn, params=[column_name, schema_name, table_name)

我提供的实际值为:这是一个很好的例子。
我使用pyodbc生成连接,postgresql是我使用的数据库。

f45qwnt8

f45qwnt81#

Pyodbc不支持参数化SQL标识符(如方案和表)。库psycopg2允许您使用这些类型的标识符动态创建SQL字符串。通过遵循psycopg2 site上的这些文档,您可以执行以下操作:

from psycopg2 import connect, sql

conn = connect("dbname=DBNAME user=USER password=PASSWORD host=HOST port=PORT")

sql_string = """
    select
        count( {column} ) as not_null_count
    from
        {schema}.{table}
    ;
"""

query = sql.SQL(sql_string).format(
    column=sql.Identifier('record_id'),
    schema=sql.Identifier('c_admin'),
    table=sql.Identifier('backup_table'),
)

df = pd.read_sql(query, conn)

相关问题