Я пытаюсь использовать функцию выполнения многих pyodbc для отправки пакета операторов выбора в SQL (Windows SQL Server Studio). Я перепробовал все форматы под солнцем, чтобы избежать бесчисленных ошибок, которые он выдает. В конце концов, мне удалось получить ответ. Использование следующего формата для передачи значений:
clients = [('test1', ),('test2', ), ('test3', ), ('test4', )]
Затем я передаю это в следующую функцию:
def sql_createconnection():
global cnxn
global cursor
server = 'XXXXXXXX'
database = 'XXXXXXXXXX'
username = 'XXXXXXXXXX'
password = 'XXXXXXXXXX'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect("DRIVER={};PORT=1433;SERVER={};PORT=1443;DATABASE={};UID={};PWD={}".format(driver,server,database,username,password),autocommit=False)
cursor = cnxn.cursor()
cursor.fast_executemany = True
def customertablecounts(clients):
sql_createconnection2()
cursor.executemany("select count(*) from dbo.[Customer_Table] where customer = ?", clients)
while cursor.nextset(): # skips the first resultset
try:
results = cursor.fetchall()
print(results)
break
except pyodbc.ProgrammingError:
print('nil')
continue
customertablecounts(clients)
Это дает следующий единственный результат: [(1,)], который мне удалось выделить как счетчик всего, что помещено во второй кортеж ввода.
В идеале я бы использовал cursor.fetchall()
, чтобы получить ответ; но это возвращает ошибку:
ProgrammingError: нет результатов. Предыдущий SQL не был запросом.
Любая помощь будет принята с благодарностью!
Спасибо!
# apps=cursor.fetchall()
# print(apps)