я пытаюсь вставить кучу данных в базу данных"Неверный тип параметра" (numpy.int64) при вставке строк с executemany()
insert_list = [(1,1,1,1,1,1),(2,2,2,2,2,2),(3,3,3,3,3,3),....] #up to 10000 tuples in this list
conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=xxxxx;DATABASE=xxxx;UID=xx;PWD=xx;TDS_Version=7.0')
cursor = conn.cursor()
sql = "insert into ScanEMAxEMAHistoryDay(SecurityNumber, EMA1, EMA2, CrossType, DayCross, IsLocalMinMax) values (?, ?, ?, ?, ?, ?)"
cursor.executemany(sql, insert_list)
cursor.executemany(sql, insert_list)
pyodbc.ProgrammingError: ('Invalid parameter type. param-index=4 param-type=numpy.int64', 'HY105')
уменьшить до 100 кортежей:
cursor.executemany(sql, insert_list[:100])
cursor.executemany(sql, insert_list[:100])
pyodbc.ProgrammingError: ('Invalid parameter type. param-index=4 param-type=numpy.int64', 'HY105') cursor.executemany(sql, insert_list[:100])
уменьшить до 5 кортежей:
cursor.executemany(sql, insert_list[:5])
conn.commit()
Это можно вставить в базу данных
Я стараюсь:
sql = 'SET GLOBAL max_allowed_packet=50*1024*1024'
cursor.execute(sql)
перед тем excutemany(), но есть ошибка:
pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]'GLOBAL' is not a recognized SET option. (195) (SQLExecDirectW)")
Как я решить эту проблему.
спасибо.
Как я могу это сделать с помощью Pandas DataFrame? Я пробовал df [col] .astype (int) для каждого col, но до сих пор не радует. –
@MattCamp - Я просто попробовал простой тест с помощью 'df.values.tolist()', и он работал для меня. Если вам нужна дополнительная помощь, вы должны [задать новый вопрос] (https://stackoverflow.com/questions/ask). –
Да, я получил его на работу. У меня была проблема, что он не позволял мне передавать данные, потому что в поле не было дубликатов, и тогда, когда я пытался сделать меньше записей, эта ошибка была выше. просто изменили дубликаты записей, чтобы проверить, что это сработало. благодаря –