带参数的 Pandas read_sql 给出 PostgreSQL 数据库的“类型错误:dict 不是序列”

问题描述 投票:0回答:1

我正在尝试使用 Pandas 的 SQL 查询参数:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('postgresql:///mydb')
conn = engine.connect()
sql = '''
SELECT id, name, age FROM person WHERE name=%{name}s
'''

df = pd.read_sql(sql, conn, params={'name': 'John Doe'})
print(df)

根据我对Pandas文档的理解,这应该可行。 但它会抛出“类型错误:字典不是序列”。

解决方案是将 SQLAlchemy 中的 SQL 包装在

text()

 中,并使用不同的占位符语法:

import pandas as pd from sqlalchemy import create_engine, text engine = create_engine('postgresql:///mydb') conn = engine.connect() sql = ''' SELECT id, name, age FROM person WHERE name=:name ''' df = pd.read_sql(text(sql), conn, params={'name': 'John Doe'}) print(df)
我可以使用

text()

,因为它使代码也独立于后端。  但是第一种方法有什么问题呢?恕我直言,它完全遵循文档。

pandas postgresql sqlalchemy psycopg2
1个回答
0
投票
它需要括号而不是大括号:

import pandas as pd from sqlalchemy import create_engine engine = create_engine('postgresql:///mydb') conn = engine.connect() sql = ''' SELECT id, name, age FROM person WHERE name=%(name)s ''' df = pd.read_sql(sql, conn, params={'name': 'John Doe'}) print(df)
    
© www.soinside.com 2019 - 2024. All rights reserved.