遍历文本文件中的 SQL 个查询并执行 - pyodbc
Loop through SQL queries in a text file and execute - pyodbc
我有一个带有 SQL 查询的管道分隔文本文件。我正在尝试循环并执行每个查询。当我在循环中打印文件中的查询时,一切似乎都很好。如果我在 SSMS 中复制文本和 运行,SQL 运行 没问题,但是当我尝试使用 pyodbc 执行时,出现错误:
ProgrammingError: No results. Previous SQL was not a query.
这是我的代码:
with open('C:/users/a/tria_file_by_ASLOB12.csv', 'r') as queryFile:
for line in queryFile:
fields = line.split('|')
print fields[0]
#cursor.execute(fields[0])
#cursor.fetchall()
Returns:
SELECT COUNT(DISTINCT(pol_num)) In_Force_Count, sum(lmt_pol_s) Exposure
FROM bapu.dbo.fact_prem
WHERE aslob = 90
and CONCAT(2016,1231) between CAST(d_pol_eff AS DATE) and CAST(d_pol_exp AS DATE)
and cvg_state = 'WA'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup WHERE ID = 40045)
SELECT COUNT(DISTINCT(pol_num)) In_Force_Count, sum(lmt_pol_s) Exposure
FROM bapu.dbo.fact_prem
WHERE aslob = 90
and CONCAT(2016,1231) between CAST(d_pol_eff AS DATE) and CAST(d_pol_exp AS DATE)
and cvg_state = 'WI'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup WHERE ID = 40045)
等等
我错过了什么?
谢谢
我明白了。我需要执行查询,然后遍历 cursor.fetchall() 的结果。这是我的代码:
row_iterator = df.iterrows()
_, last = row_iterator.next() # take first item from row_iterator
resultFile = open('C:\Users\pathtofile\file.csv', 'w')
for i, row in row_iterator:
row1 = (int(row['LEGAL_ENTITY']), int(row['CY_YE']),
int(row['TRIP_ASLOB']), row['CVG_ST'], int(row['Row']))
row2 = (last['LEGAL_ENTITY'], last['CY_YE'], last['TRIP_ASLOB'],
last['CVG_ST'], int(row['Row']))
last = row
data = row1
query= """SELECT COUNT(DISTINCT(pol_num)) In_Force_Count,
sum(distinct(lmt_pol_s)) Exposure
FROM bapu.dbo.xxx
WHERE aslob = {}
and CONCAT({},1231) between CAST(d_pol_eff AS DATE) and
CAST(d_pol_exp AS DATE)
and cvg_state = '{}'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup
WHERE ID = {})
and (cvg_desc = 'tria' or cvg_desc like '%terrorism%')
""".format(data[2],data[1],data[3], data[0])
cursor.execute(query)
for row in cursor.fetchall():
resultFile.write("{} {} {} {} {} {} {} \n".format(row[0], row[1],
data[2], data[1], data[3], data[0], data[4]))
print row[0], row[1], data[2], data[1], data[3], data[0], data[4]
我有一个带有 SQL 查询的管道分隔文本文件。我正在尝试循环并执行每个查询。当我在循环中打印文件中的查询时,一切似乎都很好。如果我在 SSMS 中复制文本和 运行,SQL 运行 没问题,但是当我尝试使用 pyodbc 执行时,出现错误:
ProgrammingError: No results. Previous SQL was not a query.
这是我的代码:
with open('C:/users/a/tria_file_by_ASLOB12.csv', 'r') as queryFile:
for line in queryFile:
fields = line.split('|')
print fields[0]
#cursor.execute(fields[0])
#cursor.fetchall()
Returns:
SELECT COUNT(DISTINCT(pol_num)) In_Force_Count, sum(lmt_pol_s) Exposure
FROM bapu.dbo.fact_prem
WHERE aslob = 90
and CONCAT(2016,1231) between CAST(d_pol_eff AS DATE) and CAST(d_pol_exp AS DATE)
and cvg_state = 'WA'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup WHERE ID = 40045)
SELECT COUNT(DISTINCT(pol_num)) In_Force_Count, sum(lmt_pol_s) Exposure
FROM bapu.dbo.fact_prem
WHERE aslob = 90
and CONCAT(2016,1231) between CAST(d_pol_eff AS DATE) and CAST(d_pol_exp AS DATE)
and cvg_state = 'WI'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup WHERE ID = 40045)
等等
我错过了什么?
谢谢
我明白了。我需要执行查询,然后遍历 cursor.fetchall() 的结果。这是我的代码:
row_iterator = df.iterrows()
_, last = row_iterator.next() # take first item from row_iterator
resultFile = open('C:\Users\pathtofile\file.csv', 'w')
for i, row in row_iterator:
row1 = (int(row['LEGAL_ENTITY']), int(row['CY_YE']),
int(row['TRIP_ASLOB']), row['CVG_ST'], int(row['Row']))
row2 = (last['LEGAL_ENTITY'], last['CY_YE'], last['TRIP_ASLOB'],
last['CVG_ST'], int(row['Row']))
last = row
data = row1
query= """SELECT COUNT(DISTINCT(pol_num)) In_Force_Count,
sum(distinct(lmt_pol_s)) Exposure
FROM bapu.dbo.xxx
WHERE aslob = {}
and CONCAT({},1231) between CAST(d_pol_eff AS DATE) and
CAST(d_pol_exp AS DATE)
and cvg_state = '{}'
and rpt_co_name in (SELECT Ent_Name FROM NAIC_Legal_Ent_Lookup
WHERE ID = {})
and (cvg_desc = 'tria' or cvg_desc like '%terrorism%')
""".format(data[2],data[1],data[3], data[0])
cursor.execute(query)
for row in cursor.fetchall():
resultFile.write("{} {} {} {} {} {} {} \n".format(row[0], row[1],
data[2], data[1], data[3], data[0], data[4]))
print row[0], row[1], data[2], data[1], data[3], data[0], data[4]