我正在尝试使用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 documentation
这应该有效。但它抛出了一个“类型错误:dict不是序列”。
解决方案是将SQL封装在
text()
来自SQLAlchemy,并使用不同的占位符语法:
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)
我很擅长使用
文本
因为它使代码也独立于后端。但是,第一种方法有什么问题?IMHO,它完全遵循文档。