读取并执行sql查询到pandas数据框中

时间:2017-10-10 20:41:11

标签: python sql pandas

我有一个长期的SQL查询,在Python中运行得很好,进入数据框架 但我有数百个,所以我尝试创建一个读取我的文件并执行它们的函数。 sql语句如下所示:

"SELECT IIf(Left([Milestone_Next_Expected],4)='Proc',1, \
 ....\
 120 lines
 ....\
dbo.MY_data_value"

这是功能

def Execute_SQL_from_a_File(filename,home,conn1):
    FORMAT1 = '%Y%m%d%H%M'
    fd = open(filename, 'r')
    sqlFile = fd.read()
    fd.close()
    KIC53 = pd.read_sql(sqlFile, conn1)
    f_out = home + out1 + ".xls"
    writer = pd.ExcelWriter(f_out)
    KIC53.to_excel(writer,f_out)
    writer.save()

这就是调用函数的原因:

Execute_SQL_from_a_File(QRYHOME + "qryBook" + str(BNUM) + "_" + str(IND) + ".sql", BNUM, home, conn1)

当我按功能运行查询时收到此错误:

: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]The 
identifier that starts with 'SELECT 
IIf(Left([Milestone_Next_Expected],4)='Proc',1, 
\\\nIIf(Left([Milestone_Next_Expected],4)='Subm',2, 
\\\nIIf(Left([Milestone_N' is too long. Maximum length is 128.")

我无法弄清楚为什么我得到长度错误,因为我可以通过将sqlFile创建为一个长字符串来运行相同的查询:

"SELECT IIf(Left([Milestone_Next_Expected],4)='Proc',1, \
 ....\
 120 lines
 ....\
dbo.MY_data_value"

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

正确的方法是: 1. sql脚本脚本不需要任何行继续符号," \"     并且不需要用引号括起来 2.读取输入文件的正确方法是:

file=open(filename,'r')
SQLfile = s = " ".join(file.readlines())

现在,代码执行时,通过pd.read_sql_query(SQLfile,conn1) 没有错误