возникли проблемы при записи фрейма данных в базу данных sqlite - PullRequest
1 голос
/ 18 февраля 2020

sqlite3.InterfaceError: Ошибка привязки параметра 2 - возможно, неподдерживаемый тип.

Вот точный код для воспроизведения ошибки

go на этой странице с открытыми инструментами разработчика

https://stats.nba.com/teams/boxscores-traditional/

на конечной точке teamgamelogs щелкните правой кнопкой мыши -> Копировать -> скопировать как curl (bash)

преобразовать в python запросы https://curl.trillworks.com/

import pandas as pd
import requests
import sqlite3

response = requests.get('https://stats.nba.com/stats/teamgamelogs?DateFrom=&DateTo=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=Totals&Period=0&PlusMinus=N&Rank=N&Season=2019-20&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&VsConference=&VsDivision=', headers=headers, cookies=cookies)

conn = sqlite3.connect('nbastats.db')
stats = response.json()

df = pd.DataFrame(stats["resultSets"])


df.to_sql('Team_stats', conn, if_exists='append')

Я не понимаю, почему я получаю эту ошибку.

sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.

Ответы [ 3 ]

0 голосов
/ 18 февраля 2020

Проверьте возвращенные типы данных из ответа. Как мы знаем, SQLite 3 поддерживает только следующие типы данных.

1) NULL. Это значение равно NULL.

2) INTEGER. Значением является целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.

3) REAL. Значение представляет собой значение с плавающей точкой, которое хранится в виде 8-байтового числа с плавающей точкой IEEE.

4) TEXT. Значение представляет собой текстовую строку, сохраненную с использованием кодировки базы данных (UTF-8, UTF-16BE или UTF-16LE).

5) BLOB. Значение представляет собой блок данных, сохраняемый в точности так, как он был введен.

Ссылка: https://www.sqlite.org/datatype3.html

0 голосов
/ 19 февраля 2020

В итоге я понял это.

Мой другой способ действий заключался в использовании функции .get_data_frames () [0], предоставляемой API, и затем я смог получить фрейм данных, выбрав позицию 0 в списке. Это можно было вставить в базу данных.

0 голосов
/ 18 февраля 2020

Я не могу получить доступ к странице, которую вы цитировали. Тем не менее, вам нужно спроектировать данные, прежде чем поместить их в SQL из фрейма данных. Проверьте типы данных:

 df.dtypes()

Если во втором столбце есть «объект», необходимо проверить, поддерживается ли тип sql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...