具有自动递增主键的Sqlalchemy / Sqlite插入条目导致NULL约束失败错误

时间:2019-07-10 18:16:07

标签: python sqlite sqlalchemy

我正在创建一个包含交易数据和其他表的表数据库,这些表主要是安全名称及其属性。

我试图捕获具有唯一TradeID的每笔交易,并将其设置为Trade Data表的主键。我不确定是否设置正确的方法,因为我一直遇到如下所示的NULL条件错误


class Security(Base):

    __tablename__ = "Security_Table"

    Bloomberg_Symbol = Column(String(20),primary_key=True,nullable=False)


class Daily_Security_Data(Base):

    __tablename__ = "Daily_Security_Data_Table"

    Bloomberg_Symbol=Column(String(20),ForeignKey('Security_Table.Bloomberg_Symbol'),primary_key=True)

    Date = Column(Date,primary_key=True)

    Daily_Rate=Column(Float)

    Adv_20=Column(Integer)        # ADV 20 Days as of that day

    Adv_100=Column(Integer)       # ADV 100 Days as of that day      

    Volume_On_Day=Column(Float)


class Trade_Daily_Data(Base):

    __tablename__ = "Daily_Trades_Data_Table"

    __table_args__ = {'sqlite_autoincrement': True}


 Bloomberg_Symbol=Column(String(20),ForeignKey('Daily_Security_Data_Table.Bloomberg_Symbol'))

    Date=Column(Date,ForeignKey('Daily_Security_Data_Table.Date'))

    TradeID=Column(Integer,primary_key=True)

    Model=Column(Integer)

    Side=Column(String(20))

    Qty=Column(Integer)   

    AvgPrice=Column(Float)

然后,我通过遍历交易数据文件来创建和添加交易对象。

trade_obj=Trade_Daily_Data(Bloomberg_Symbol="ABCD US Equity",Date='2018-12-04',Model=103,
Side='Short',Qty=800,AvgPrice=62.5)

但是我碰到了

IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: Daily_Trades_Data_Table.TradeID    

0 个答案:

没有答案