问题描述
尝试使用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))