Python Forum

Full Version: PyODBC error - second parameter to executemany must be a sequence, iterator, or gener
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,

I am trying this to get some values into SQLServer2017. when I try this code it throws pyodbc.ProgrammingError: The second parameter to executemany must be a sequence, iterator, or generator. How can I fix this

Thanks in advance
for key, value in myDict.items():
        for idx,retData in enumerate(value): 
            #everything into dict
            retData["remotecontrol_id"], idx
            retData["device_id"],idx 
            retData["alias"], idx
            retData["groupid"], idx
            retData["online_state"], idx
                        
            
    sqeel = ("""INSERT INTO dbo.devTBLA[remotecontrol_id], [device_id], [alias],[groupid],
    [online_state])) 
    values(%s, %s, %s, %s, %s, %s, %s)""")
    numRows = cursor.executemany(sqeel, retData) #second parameter to executemany must be a    sequence, iterator, or generator.


    connStr.commit()
    cursor.close()
    connStr.close()
Hello Larx60+
Here is the code, Let me know if what else is needed> Thanks
import requests
from requests.auth import HTTPDigestAuth
import json
from pandas.io.json import json_normalize
import pandas as pd
from pandas import ExcelWriter
import random
import pyodbc
import sqlalchemy
def DBInsertD():
headers = {"content-type": "application/json", "Authorization": "Bearer nnnnn"}
    r = requests.get(url, headers=headers)   
    r3 = r.json() #Convert to JSON
connStr= pyodbc.connect('DRIVER={SQL Server};Server=Servername;Trusted_Connection=True;DATABASE=myDB')
    cursor = connStr.cursor()
    for key, value in r3.items():
        for idx,retData in enumerate(value): 
            #everything into dict
            retData["remotecontrol_id"], idx
            retData["device_id"],idx 
            retData["alias"], idx
            retData["groupid"], idx
            retData["online_state"], idx 
            
                        
            
    sqeel = ("""INSERT INTO dbo.TVDevicesA[remotecontrol_id], [device_id], [alias],[groupid],
    [online_state])) 
    values(%s, %s, %s, %s, %s, %s, %s)""")
    numRows = cursor.executemany(sqeel, x) #pyodbc.ProgrammingError: The second parameter to executemany must be a sequence, iterator, or generator.


    connStr.commit()
    cursor.close()
    connStr.close()
DBInsertD()
Error output
Error:
pyodbc.ProgrammingError: The second parameter to executemany must be a sequence, iterator, or generator. The program '[12832] python.exe' has exited with code -1 (0xffffffff)