flask-sqlAlchemy如何处理json的主键?

时间:2017-10-15 18:44:58

标签: postgresql flask-sqlalchemy jsonb

我是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,我如何更正此错误。

0 个答案:

没有答案