Всем привет, столкнулся с проблемой записи в базу данных.
Не пойму в чём проблема, раньше работал с этим модулем, таких проблем не возникало.
Пытаюсь передать список, в котором 136 элементов.
Ошибка
%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,
Traceback (most recent call last):
File "cbr.py", line 110, in <module>
print(a.data_sampling(b))
File "cbr.py", line 103, in data_sampling
insert(data)
File "cbr.py", line 74, in insert
_f.execute("INSERT INTO "+days+" VALUES("+s+" %s);", data)
psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
import requests, browser_cookie3, psycopg2, datetime
from bs4 import BeautifulSoup
class CBR:
''' Класс описывающий работу парсера.
Происходит инициализация url, за тем следует
метод подключения к серверу и метод записи в csv файл,
который вызывается в методе забора данных.
Следом идёт метод записи в базу данных из csv, в методе
присутствует функция инструкции подключения. После записи в базу, файл очищается. '''
def __init__(self):
''' Метод инициализации url '''
self.url = 'https://cbr.ru/currency_base/daily/?date_req=03.10.2019'
def connect(self):
''' Метод подключения к серверу.
Метод включает проверку на ответ Response '''
browser = browser_cookie3.firefox()
resp = requests.get(self.url, cookies=browser)
if resp.status_code == 200:
return resp.text
else:
return 'Error - ' + str(resp.status_code)
def data_sampling(self, connect):
''' Метод data sampling принемает результат из метода connect
Забор данных происходит в следующем ключе:
1) Происходит сканирование страницы.
2) Происходит поиск таблице
3) из таблицы забираем данные по "Валюта" и "Курс", а так же
"Букв. код" и "Цифр. код" '''
# Подключение к базе данных
try:
conn = psycopg2.connect(
database = 'cbr',
host = 'localhost',
user = 'postgres',
password = '1'
)
_f = conn.cursor()
except:
return "No connect database!"
days = "cbr_" + str(datetime.datetime.today().strftime('%Y_%m_%d'))
def table():
''' Функция создаёт новую таблицу в базе
на каждый день '''
try:
CT = _f.execute("CREATE TABLE " + days + '''(
digital_code varchar NOT NULL,
letter_code varchar NOT NULL,
name varchar NOT NULL,
value varchar NOT NULL,
PRIMARY KEY (letter_code))''')
conn.commit()
return "True"
except:
return "Table already exist!"
table()
def insert(data):
# Функция записывает данные в таблицу
s = '%s, ' * 135
print(s)
_f.execute("INSERT INTO "+days+" VALUES("+s+" %s);", data)
conn.commit()
return "True"
bs = BeautifulSoup(connect, 'lxml')
table = bs.find('table').find('tbody')
tr_array = table.find_all('tr')[1:]
data = []
for tr in tr_array:
td = tr.find_all('td')
digital_code = td[0].text
data.append(digital_code)
letter_code = td[1].text
data.append(letter_code)
name = td[3].text
data.append(name)
value = td[4].text
data.append(value)
print(len(data))
insert(data)
return True
a = CBR()
b = a.connect()
print(a.data_sampling(b))