【问题标题】:Inserting record to mysql table, via sqlalchemy , with autoinc throws error通过 sqlalchemy 使用 autoinc 将记录插入 mysql 表会引发错误
【发布时间】:2019-09-01 01:55:58
【问题描述】:

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

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

甚至通过echo=True 生成的复制粘贴 SQL 通过 MySQL 插入记录。

股票类别

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

【问题讨论】:

  • 提示:当你进入 MySQL shell 并输入 SHOW CREATE TABLE Stock 时会发生什么,它会显示AUTO_INCREMENT吗?

标签: python mysql sqlalchemy


【解决方案1】:

autoincrement=True 添加到您的专栏中。

【讨论】:

  • 它不在你的代码中;也许您应该发布您正在使用的完整代码。
  • 认为autoincrement 是可选的,我在原始代码中没有它,但在谷歌搜索后尝试了它。更新了更多代码。
【解决方案2】:

知道了。转换为整数后,我的列类型为字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 2013-08-18
    • 2021-03-31
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多