Intentando insertar los elementos de exp_data en filas individuales de la columna SQLAlchemy exp_list dentro de la tabla de Expiration mediante programación usando Python dentro del marco FastAPI:
exp_data = ['2020-08-27', '2020-09-03', '2020-09-10', '2020-09-17'] for i in exp_data: exp = Expiration(symbol=stock.symbol, exp_list=exp_data) db.add_all([stock, exp]) db.commit()Y mi modelo SQLAlchemy es:
from sqlalchemy import Boolean, Column, ForeignKey, Numeric, Integer, String, Date, Float from sqlalchemy.orm import relationship, backref from database import Base class Stock(Base): __tablename__ = "stocks" id = Column(Integer, primary_key=True, index=True) symbol = Column(String) price = Column(Float) class Expiration(Base): __tablename__ = "expirations" id = Column(Integer, primary_key=True, index=True) symbol = Column(String, ForeignKey(Stock.symbol), index=True) exp_list = Column(String) Puse exp_data en el código para mostrar el tamaño: estoy extrayendo estos datos y quiero que el programa inserte automáticamente los datos en la base de datos simplemente publicando una solicitud HTTP del tablero de cotizaciones en el servidor. He estado recibiendo este error:
sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) Error binding parameter 1 - probably unsupported type. [SQL: INSERT INTO expirations (symbol, exp_list) VALUES (?, ?)] [parameters: ('FB', ['2020-08-27', '2020-09-03', '2020-09-10', '2020-09-17'])] Creo que el problema es con el ciclo for en el primer bloque de código: he estado tratando de encontrar estrategias para iterar a través de cada valor, como '2020-08-27' , e insertarlo en filas individuales. Cualquier ayuda es muy apreciada - ¡gracias!
Probablemente quieras algo como
exp_data = ['2020-08-27', '2020-09-03', '2020-09-10', '2020-09-17'] exps = [] for date in exp_data: exps.append(Expiration(symbol=stock.symbol, exp_list=date)) instances = [stock] instances.extend(exps) db.add_all(instances) db.commit() es decir, recorrer la lista de fechas y crear una instancia de Expiration para cada una.
Su columna: exp_list definida como cadena/columna de texto
exp_list = Columna (Cadena)
Y luego le pasas una lista de python
exp_data= ['2020-08-27', '2020-09-03', '2020-09-10', '2020-09-17']
exp = Caducidad(símbolo=stock.símbolo, exp_list =exp_data)
Debes pasar la lista como cadena.
exp = Expiration(symbol=stock.symbol, exp_list=','.join(exp_data))