通过sqlalchemy将记录插入mysql表,autoinc抛出错误

时间:2012-09-23 08:21:06

标签: python mysql sqlalchemy

我正在尝试为具有auto_increament的表以及一些外键插入一行。存在所有外键。但它会引发错误。

  

sqlalchemy.orm.exc.FlushError:0x9cf062c的实例库存有一个   NULL标识密钥。如果这是一个自动生成的值,请检查   数据库表允许生成新的主键值   映射的Column对象配置为期望生成这些   值。确保此处没有发生此flush()   不合适的时间,例如在load()事件中。

即使通过mysql插入记录,也正在执行echo=True生成的复制粘贴sql。

股票类

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

2 个答案:

答案 0 :(得分:0)

autoincrement=True添加到您的专栏。

答案 1 :(得分:0)

知道了。我将列类型作为String,转换为Integer后工作正常。