#python #web-scraping
Вопрос:
У меня есть код, который выполняется из приведенного ниже кода. Это подключает данные веб-очистки непосредственно к sql server.
import pypyodbc as odbc
import cursor
import requests
import pandas as pd
import numpy as np
url = "https://www.cse.lk/api/tradeSummary"
data = requests.post(url).json()
df = pd.DataFrame(data["reqTradeSummery"])
df = df.astype({'id': float, 'name': str, 'symbol': str, 'quantity': float, 'percentageChange': float, 'change': float, 'price': float, 'previousClose': float, 'high': float,
'low': float, 'lastTradedTime': str, 'issueDate': str, 'turnover': float, 'sharevolume': float, 'tradevolume': float, 'marketCap': float, 'marketCapPercentage': float,
'open': float, 'closingPrice': float, 'crossingVolume': float, 'crossingTradeVol': float, 'status': float})
При выборе типов df.dtypes он представляет собой
id float64
name object
symbol object
quantity float64
percentageChange float64
change float64
price float64
previousClose float64
high float64
low float64
lastTradedTime object
issueDate object
turnover float64
sharevolume float64
tradevolume float64
marketCap float64
marketCapPercentage float64
open float64
closingPrice float64
crossingVolume float64
crossingTradeVol float64
status float64
dtype: object
В sql-сервере,
COLUMN_NAME DATA_TYPE
datekey datetime
id float
name nvarchar
symbol nvarchar
quantity float
percentageChange float
change float
price float
previousClose float
high float
low float
lastTradedTime float
issueDate datetime
turnover float
sharevolume float
tradevolume float
marketCap float
marketCapPercentage float
open float
closingPrice float
crossingVolume float
crossingTradeVol float
status float
Но когда я выполняю запрос, он выдает следующее сообщение об ошибке.
---------------------------------------------------------------------------
DataError Traceback (most recent call last)
<ipython-input-1-4abba6d97d90> in <module>
48 cursor = conn.cursor()
---> 49 cursor.executemany(sql_insert, records)
50 cursor.commit();
C:ProgramDataAnaconda3libsite-packagespypyodbc.py in executemany(self, query_string, params_list)
1670 for params in params_list:
-> 1671 self.execute(query_string, params, many_mode = True)
1672 self._NumOfRows()
C:ProgramDataAnaconda3libsite-packagespypyodbc.py in execute(self, query_string, params, many_mode, call_mode)
1595 #print param_valparam_buffer, param_buffer.value
-> 1596 check_success(self, ret)
1597
C:ProgramDataAnaconda3libsite-packagespypyodbc.py in check_success(ODBC_obj, ret)
985 if isinstance(ODBC_obj, Cursor):
--> 986 ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
987 elif isinstance(ODBC_obj, Connection):
C:ProgramDataAnaconda3libsite-packagespypyodbc.py in ctrl_err(ht, h, val_ret, ansi)
955 elif state[:2] in (raw_s('22')):
--> 956 raise DataError(state,err_text)
957 elif state[:2] in (raw_s('23')) or state == raw_s('40002'):
DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification')
During handling of the above exception, another exception occurred:
TypeError Traceback (most recent call last)
<ipython-input-1-4abba6d97d90> in <module>
51 except Exception as e:
52 cursor.rollback()
---> 53 print(str(e[1]))
54 finally:
55 print('Task is complete.')
TypeError: 'DataError' object is not subscriptable
Код на python до сегодняшнего дня работал идеально. Но по какой-то причине это выдает мне сообщение об ошибке, как указано выше. Ранее я не использовал приведенный ниже код в основном коде, как указано выше. Но я получаю то же самое сообщение об ошибке.
df = df.astype({'id': float, 'name': str, 'symbol': str, 'quantity': float, 'percentageChange': float, 'change': float, 'price': float, 'previousClose': float, 'high': float,
'low': float, 'lastTradedTime': str, 'issueDate': str, 'turnover': float, 'sharevolume': float, 'tradevolume': float, 'marketCap': float, 'marketCapPercentage': float,
'open': float, 'closingPrice': float, 'crossingVolume': float, 'crossingTradeVol': float, 'status': float})
Кто-нибудь может мне помочь это исправить? было бы действительно здорово. Я действительно потеряюсь, если не смогу исправить это сегодня.
Комментарии:
1. Столбец «lastTradedTime» находится
float
в базе данных, ноobject
вpython
. Может быть, в нем есть что-то, что не является числом?