0

auto_incrementいくつかの外部キーを持つテーブルに行を挿入しようとしています。すべての外部キーが存在します。しかし、それはエラーをスローします。

sqlalchemy.orm.exc.FlushError: 0x9cf062c のインスタンス ストックに NULL ID キーがあります。これが自動生成された値である場合は、データベース テーブルで新しい主キー値の生成が許可されていること、およびマップされた Column オブジェクトがこれらの生成された値を期待するように構成されていることを確認してください。また、load() イベント内など、不適切な時間にこの flush() が発生していないことも確認してください。

で生成された SQL のコピペによる MySQL 経由のレコードの挿入もecho=True実行されています。

ストッククラス

class Stock(Base):
    __tablename__ = 'Stock'

    Code = Column('Code',String(8),primary_key=True)
    Symbol = Column('Symbol',String(128))
    ListingName = Column('ListingName',String(256))
    ListingDate = Column('ListingDate',DateTime())
    RecordAddedDate = Column('RecordAddedDate',DateTime())

    HomeCountry = Column('HomeCountry',ForeignKey('Country.Code'))
    PrimaryExchange = Column('PrimaryExchange',ForeignKey('Exchange.Code'))
    BaseCurrency = Column('BaseCurrency',ForeignKey('Currency.Code'))
    InstrumentType = Column('InstrumentType',ForeignKey('Instrument.InstrumentType'))

レコード挿入

Engine = sqlalchemy.create_engine('mysql://user:pass@host/db',echo=True)
Session = sqlalchemy.orm.sessionmaker(bind=Engine)
SessionObj = Session()

NewStock = Stock()
NewStock.InstrumentType = 'Stock'
NewStock.Symbol = 'MSFT'
NewStock.ListingName = 'Microsoft'
NewStock.HomeCountry = 'IN'
NewStock.PrimaryExchange = 'NSEOI'
NewStock.BaseCurrency = 'INR'
NewStock.ListingDate = datetime.datetime.now().strftime("%Y%m%d")
NewStock.RecordAddedDate = datetime.datetime.now().strftime("%Y%m%d")

print NewStock

SessionObj.add(NewStock)
SessionObj.flush()

print NewStock.Code
4

2 に答える 2

1

列に追加autoincrement=Trueします。

于 2012-09-23T08:34:01.460 に答える
0

とった。整数への変換が正常に機能した後、列の型を文字列にしました。

于 2012-09-23T09:31:48.637 に答える