如何将Python列表中的所有元素插入SQLAlchemy列的各个行?

问题描述

尝试使用FastAPI框架中的Python,以编程方式将exp_data的元素插入exp_list表内的sqlAlchemy列Expiration的各个行中:

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() 

我的sqlAlchemy模型是:

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,index=True)
    symbol = Column(String,ForeignKey(Stock.symbol),index=True)
    exp_list = Column(String)

我在代码中放入了exp_data显示大小-我正在抓取这些数据,并且我希望该程序通过简单地将股票报价器的HTTP请求发布到服务器来将数据自动插入数据库中。正在收到此错误

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-17'])]

我认为问题在于第一个代码块中的for循环-我一直在尝试寻找策略来迭代每个值(例如'2020-08-27')并将其插入到单独的行中。非常感谢您的帮助-谢谢!

解决方法

您可能想要类似的东西

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() 

,即遍历日期列表并为每个日期创建一个Expiration实例。

,

您的列:exp_list定义为字符串/文本列

exp_list =列(字符串)

然后您将一个python列表传递给它

exp_data = ['2020-08-27','2020-09-03','2020-09-10','2020-09-17']
exp =到期时间(symbol = stock.symbol, exp_list = exp_data

您应该将列表作为字符串传递

exp = Expiration(symbol=stock.symbol,exp_list=','.join(exp_data))