我是flask和sqlAlchemy的新手。任何帮助都会很棒。
我的模特是:
class ReferentialDatum(db.Model):
__tablename__ = 'referential_data'
sid = db.Column(db.Integer, primary_key=True, nullable=False)
venues = db.Column(db.JSON, primary_key=True, nullable=False)
exchange_tickers = db.Column(db.JSON)
trading_date = db.Column(db.Date, primary_key=True, nullable=False, index=True)
total_volume = db.Column(db.BigInteger)
last_trade_price = db.Column(db.Numeric)
last_reference_price = db.Column(db.Numeric)
exchange_close_price = db.Column(db.Numeric)
adjusted_close_price = db.Column(db.Numeric)
close_price = db.Column(db.Numeric)
close_price_source = db.Column(db.Text)
insertion_time_utc = db.Column(db.DateTime(True), server_default=db.FetchedValue())
last_updated_time = db.Column(db.BigInteger)
请注意,我在我的模型中使用场地作为json字段,它也是主键。
在我的功能中,我有:
def ListProtobuf(Reference_data):
venues = {"Canada1":1, "Canada2":1}
exchange_tickers = {"AAPL":1, "APL":1}
trading_date = datetime.date.today()
item = ReferentialDatum.query.filter_by(sid=Reference_data.security_id,trading_date=trading_date,venues=venues)
if item.count()>0:
item.update({"total_volume":sum(Reference_data.total_volume),"last_trade_price":Reference_data.last_trade_price,"last_reference_price":Reference_data.reference_price,"last_updated_time":Reference_data.update_time})
db.session.commit()
else:
entry = ReferentialDatum(sid=Reference_data.security_id,exchange_tickers=exchange_tickers,venues=venues,trading_date=trading_date,total_volume=sum(Reference_data.total_volume),last_trade_price=Reference_data.last_trade_price,last_reference_price=Reference_data.reference_price,last_updated_time=Reference_data.update_time)
db.session.add(entry)
db.session.commit()
当我尝试插入一个新行(之前不存在)时,我收到以下错误:
File "mini_conda/envs/env/lib/python2.7/site-packages/sqlalchem /orm/identity.py", line 97,
in __contains__ if key in self._dict:
TypeError: unhashable type: 'dict'
但是,如果我从场地字段上的模型中删除primary_key = True。我不会收到此错误。
有关为什么会发生这种情况的任何想法。 ORM是否使用作为主键的字段作为某些dict的键,这会产生这种错误。如果我需要primary_key = True,我如何更正此错误。