Как выполнить запрос по результатам предыдущего запроса с pymssql?
Это то, что я пытался:
from os import getenv
import pymssql
import pandas as pd
import arcpy
import csv
from decimal import Decimal
from functools import partial
import time
from datetime import datetime
####### connect to DB #######
conServer = r"myserver\myserver"
condb = "some database"
conn = pymssql.connect(server=conServer, database=condb)
cursor = conn.cursor()
##### query 1 #####
query1 = "DECLARE
SOMETHING
SELECT
SOME FIELDS
FROM
dbo.SOMETABLE
WHERE
SOME CONDITIONS"
resQuery1 = cursor.execute(query1)
##### query 2 #####
query2 = """DECLARE @something TINYINT = 1
;WITH VARIABLE1 AS (
SELECT
SOME FIELDS
FROM
SOME TABLES WITH A BUNCH OF JOINS
WHERE
SOME CONDITIONS
GROUP BY
FIELD2
), FIELD3 AS (
SELECT
THIS,
Sum(THAT) as SUMTHAT
FROM %s
GROUP BY
FIELD2
)
SELECT
REST OF THE QUERY"""
cursor.execute(query2, (resQuery1))
попытка передать% s не сработала.
Я также пытался сохранить результаты запроса в таблице in_memory с использованием arcpy, поскольку мне пришлось в конечном итоге выполнить это в ArcGIS Server со следующим кодом:
########## in memory table
gis_temp_loc_loss_adj = "temp_loc_loss_adj" + datestamp
query1Table = arcpy.CreateTable_management(r"in_memory", gis_temp_loc_loss_adj)
columnNames = tuple(map(str, [i[0] for i in cursor.description]))
addfield = partial(
arcpy.AddField_management,
query1Table
)
for field in columnNames:
addfield(field)
with arcpy.da.InsertCursor(query1Table, columnNames) as insCur:
for row in cursor:
insCur.insertRow(row)
Но я не могу найтиспособ прочитать имя таблицы in_memory и включить его в SQL-запрос.
Что я делаю неправильно в cursor.execute, что он не получает% s?В качестве альтернативы, как я могу сохранить результат query1 в памяти и использовать его в query2?
Чтобы уточнить, я не могу писать на сервере sql и не могу создавать временные таблицы в базе данных SQL