Estoy tratando de guardar los datos entrantes de d en la base de datos de postgres, pero sigue devolviendo listdata que no tiene datos de atributos y no entiendo por qué. Si no me equivoco, solo hay una columna que debe guardarse, ¿verdad?

Si haces print(d), puedes ver los datos que vienen, pero no sé cómo guardarlos.

from datetime import datetime
from requests import Session
import pandas as pd
import matplotlib.pyplot as plt
import psycopg2
import time
from psycopg2.extras import RealDictCursor

page_url = "https://www.nseindia.com/get-quotes/equity?symbol=LT"
chart_data_url = "https://www.nseindia.com/api/chart-databyindex"

s= Session()

h = {"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",
     "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
    "accept-encoding": "gzip, deflate, br",
    "accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
    }

s.headers.update(h)
r = s.get(page_url)
def fetch_data(symbol):
    data = {"index": symbol + "EQN"}
    r = s.get(chart_data_url, params=data)
    data = r.json()['grapthData']
    return [[datetime.utcfromtimestamp(d[0]/1000),d[1]] for d in data]

data = fetch_data("MARUTI")
with psycopg2.connect(
    host="localhost",
    database="tickdata",
    port="5432",
    user="postgres",
    password="passkey",
    cursor_factory=RealDictCursor,
) as conn:
    with conn.cursor() as cur:
        sql = """INSERT INTO pytick (sequence) VALUES (%s) RETURNING *"""
        
        cur.executemany(sql, data)

devolviendo este error cur.executemany(sql, data) TypeError: no todos los argumentos se convirtieron durante el formateo de cadenas [Terminado en 1.8s]

0
Riku 10 ene. 2022 a las 14:06
La sangría se ve rara (d = fetch_data(... está al mismo nivel que una return declaración`...) y la sangría es importante en Python. ¿Podría proporcionar la sangría correcta?
 – 
Serge Ballesta
10 ene. 2022 a las 14:18
Reformateado compruébalo
 – 
Riku
10 ene. 2022 a las 14:24

1 respuesta

La mejor respuesta

Tu sqlcode es una tupla. Probablemente no debería serlo.

Tampoco estás usando la cláusula RETURNING, así que deshazte de ella.

Considerándolo todo, tal vez estés buscando algo como

data = fetch_data("MARUTI")
with psycopg2.connect(
    host="localhost",
    database="tickdata",
    port="5432",
    user="postgres",
    password="passkey",
    cursor_factory=RealDictCursor,
) as conn:
    with conn.cursor() as cur:
        sql = "INSERT INTO pytick (id, data) VALUES (%s, %s)"
        cur.executemany(sql, data)

Para insertar todas las 2 tuplas en data.

0
AKX 10 ene. 2022 a las 14:30
Recibo este error ::: no todos los argumentos se formatearon durante el formateo de cadenas
 – 
Riku
10 ene. 2022 a las 14:48
¿De dónde sacas ese error?
 – 
AKX
10 ene. 2022 a las 15:18
Cur.executemany(sql,data) aquí recibo ese error, excluí ese campo de identificación
 – 
Riku
10 ene. 2022 a las 15:26
Mira he actualizado el codigo
 – 
Riku
10 ene. 2022 a las 15:56