使用pandas执行如下面的代码片段所示的参数化sql查询。我在where子句中输入了一个变量日期作为起始和到期的标记,但是我不想把它作为参数添加两次,因为它是同一个变量。我肯定有办法解决这个问题,但是我找不到。
import pandas as pd
import datetime
dt = datetime.date(2021, 10, 1)
select_sql = """Select Inception, Expiry From TableTest Where Inception <= ? and Expiry >= ?"""
sql_query = pd.read_sql_query(select_sql, conn, params=[dt,dt])
您可以使用Python的f-string语法创建想要传递给SQL函数的查询字符串。SQL查询中的日期值需要用引号括起来。
select_sql = f"SELECT Inception, Expiry FROM TableTest WHERE Inception <= '{dt}' AND Expiry >= '{dt}'"
print(select_sql)
SELECT Inception, Expiry FROM TableTest WHERE Inception <= '2021-10-01' AND Expiry >= '2021-10-01'
然后您可以将这个查询字符串传递给带有pd.read_sql_query(select_sql, conn)
的pandas函数,因为使用这种方法您不再需要params
参数。