我正在从pandas查询我的SSMS数据库,我拥有的查询非常大,我已将其保存在本地,并希望将该查询读取为pandas数据框,并且在查询中还有一个日期字符串,我想将该日期字符串替换为我已经在pandas中分配的日期。为方便参考,我将缩短查询。
我现在在下面写:
query = """SELECT * FROM table where date > 'date_string' """
query_result = pd.read_sql(query, conn)
不要写select *…在pandas中,我将查询保存在本地。我想让pandas读取这个查询。同时替换date_string与startDate_sql
我的date_string在我循环遍历日期列表时不断变化。
pandas代码看起来像
query = 'C:UsersAdminDesktopPythonOpen Sourcequery.sql'
query.replace(date_string, startDate_sql)
query_result = pd.read_sql(query, conn)
这样我就不用pandas来写我的查询了,因为它是一个巨大的查询并且消耗了大量的空间。
谁能告诉我如何解决这个问题,什么是正确的语法?非常感谢!
用Python读取文件
下面是如何在Python中读取文本文件。
query_filename = 'C:UsersAdminDesktopPythonOpen Sourcequery.sql'
# 'rt' means open for reading, in text mode
with open(query_filename, 'rt') as f:
# read the query_filename file into a variable named query
query = f.read()
# replace the literal string 'date_string' with the contents of the variable startDate_sql
query = query.replace('date_string', startDate_sql)
# get dataframe from database
query_result = pd.read_sql(query, conn)
使用参数化查询
您可能应该避免替换字符串来构造查询,因为它会受到SQL注入的影响。参数化查询避免了这个问题。下面是如何在Pandas中使用查询参数化的一个示例。