首页 > 解决方案 > heroku 上的 BigInteger sqlalchemy 列中的整数超出范围错误

问题描述

我试图了解为什么我会收到以下对象的 sql 错误。我在 heroku 上使用 PostGresSql 数据库

class Member(BASE):
    __tablename__ = "members"

    name = Column(String)
    discord_id = Column(BigInteger, primary_key=True,nullable=False)
    role = Column(String, ForeignKey('roles.name'))
    nick = Column(String)
    rs_runs = relationship("RSRun",secondary='member_on_rs_run')

    def __init__(self,name,discord_id,nick="" ):
        self.name = name
        self.discord_id = discord_id
        self.nick = nick

class RSRun(BASE):
    __tablename__ = "rs_runs"
    id = Column(Integer, primary_key=True, nullable=False)
    level = Column(String)
    dtg = Column(DateTime)
    members = relationship("Member",secondary='member_on_rs_run')


class MemberOnRSRun(BASE):
    __tablename__ = "member_on_rs_run"
    member_id = Column(BigInteger, ForeignKey('members.discord_id'),primary_key = True)
    run_id = Column(Integer,ForeignKey('rs_runs.id'),primary_key=True)

我得到的错误在这里

sqlalchemy.exc.DataError: (psycopg2.errors.NumericValueOutOfRange) integer out of range

[SQL: INSERT INTO members (name, discord_id, role, nick) VALUES (%(name)s, %(discord_id)s, %(role)s, %(nick)s)]
[parameters: {'name': '', 'discord_id': 126793648221192192, 'role': None, 'nick': ''}]

我已经检查过了,discord_id 在 PostGres BigInt 的合法范围内,这是我假设我使用 sqlalchemy Biginteger 列得到的。但它一直告诉我它超出了整数的范围。显然,我想使用 Discord 使用的相同 ID,因为这是 Discord 上成员的标识符。

标签: python-3.xherokusqlalchemyheroku-postgres

解决方案


对您在 sqlalchemy 声明形式中使用的 python 对象进行更改不会强制 heroku 更新数据库。您必须手动清除数据库才能使这些更改生效。


推荐阅读