You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLAlchemy设置字符串主键直接插入报id()参数错误是什么原因?

错误产生原因
  1. 核心报错来自relationship配置的order_by参数:你代码中写的order_by=id,但当前Unix模型内未定义名为id的字段,此处的id被解析为Python内置的id()函数。SQLAlchemy后续解析排序规则时会尝试调用该对象获取排序依据,未传入参数就触发了TypeError: id() takes exactly one argument (0 given)错误,该错误会影响所有依赖SQLAlchemy模型解析的操作,所以其他模型也会抛出异常。
  2. 关联属性赋值写法错误:unix.code(code)的写法不生效,relationship定义的code是属性不是可调用方法,需要直接赋值。
修复方案
  • 修正order_by配置:如果需要按Unix表的accession主键排序,将参数改为order_by=accession;如果需要按关联的Code表的id排序,改为order_by='Code.id'即可。
  • 修正关联属性赋值逻辑,将调用写法改为直接赋值unix.code = code。
  • 你当前定义字符串类型主键的写法没有问题,只要插入时显式传入accession的值即可正常写入,不需要额外配置主键生成规则。

修复后的模型示例

class Unix(Base):
    __tablename__ = 'unix'

    accession = Column('accession', String, primary_key=True)
    code_id = Column(BIGINT, ForeignKey('code.id'))

    # 此处示例按accession排序,可根据业务需求调整排序字段
    code = relationship('Code', backref=backref('unix', order_by=accession))

    def __init__(self, accession):
        self.accession = accession

修复后的业务代码示例

unix = Unix(accession='asd')
unix.code = code
self.session.add(unix)
self.session.commit()

内容的提问来源于stack exchange,提问作者Hyungsik Jo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:48:03