#python #sql #pyodbc
#python #sql #pyodbc
Вопрос:
Я довольно новичок в Python, по крайней мере, в таких проблемах, и боролся с этим в течение нескольких дней!
Я использовал df.to_sql довольно долго и для множества разных фреймов данных, но теперь столкнулся со следующей проблемой / ошибкой:
Ошибка DBAPIError: (pyodbc.Error) (‘HY004’, ‘[HY004] [Microsoft] [Драйвер ODBC SQL Server] Недопустимый тип данных SQL (0) (SQLBindParameter)’)
Мой код выглядит следующим образом:
**pyodbc.pooling = False
params = urllib.parse.quote_plus("Driver={SQL Server};Server=[ServerName];Database=DatabaseName")
engine = create_engine("mssql pyodbc:///?odbc_connect=%s" % params)**
df.to_sql('Table_Name',
con = engine,
if_exists='replace')
Я использовал код для множества разных фреймов данных и понятия не имею, что изменилось для этих конкретных данных? Это из JSON-файла, который я сгладил.
Есть идеи относительно того, что может вызвать это?
Я не использую Linux или что-то еще.
Мой фрейм данных выглядит следующим образом:
eventId
0 97592224 3361 1609 2086192 1H 0.491250 8
1 97592225 49876 1609 2086192 1H 3.649639 8
2 97592168 14853 1631 2086192 1H 5.356103 8
3 97592169 8730 1631 2086192 1H 8.653246 8
4 97592170 14763 1631 2086192 1H 10.219569 8
... ... ... ... ... ... ... ...
1667 586886958 14870 1612 2086209 2H 2915.347568 2
1668 586886947 8292 1624 2086209 2H 2924.483590 3
1669 586886948 269676 1624 2086209 2H 2926.881486 1
1670 586886959 25393 1612 2086209 2H 2927.766165 1
1671 586886949 13484 1624 2086209 2H 2929.858276 8
eventName subEventId subEventName positions.0.x positions.0.y
0 Pass 85 Simple pass 51 51
1 Pass 83 High pass 35 48
2 Pass 85 Simple pass 39 12
3 Pass 83 High pass 34 23
4 Pass 82 Head pass 65 24
... ... ... ... ... ...
1667 Foul 24 Protest 37 90
1668 Free Kick 36 Throw in 64 0
1669 Duel 10 Air duel 77 23
1670 Duel 10 Air duel 23 77
1671 Pass 83 High pass 74 27
positions.1.x positions.1.y tags.0.id tags.1.id tags.2.id tags
0 35.0 48.0 1801.0 NaN NaN NaN
1 61.0 88.0 1802.0 NaN NaN NaN
2 34.0 23.0 1801.0 NaN NaN NaN
3 65.0 24.0 1801.0 NaN NaN NaN
4 85.0 22.0 1801.0 NaN NaN NaN
... ... ... ... ... ... ...
1667 NaN NaN 1702.0 NaN NaN NaN
1668 77.0 23.0 1801.0 NaN NaN NaN
1669 74.0 27.0 701.0 1802.0 NaN NaN
1670 26.0 73.0 703.0 1801.0 NaN NaN
1671 NaN NaN 1802.0 NaN NaN NaN
Отредактировано:
Фрейм данных можно загрузить по этой ссылке: https://drive.google.com/file/d/1r_zpj-24Unb9XXyYlVNwBkMU_YaKC2ll/view?usp=sharing
Комментарии:
1. Пожалуйста, создайте минимальный фрейм данных, который вызовет ошибку, используйте
df.to_pickle("pickled.gz")
для сериализации его в файл на диске, затем разместите ссылку для скачивания этого файла, чтобы другие могли воспроизвести проблему.2. Привет @Gord , образец фрейма данных можно загрузить по следующей ссылке
3. Проверьте значение в
tags
столбце строки с индексом 8. Похоже, что это пустой ряд, и это, похоже, портит работу. Я могу избежатьto_sql
ошибки, если сделаюdf.iloc[8, 17] = None
это первым.4. Большое спасибо за помощь! Очень признателен!!