python-3.x - 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 上成员的标识符。
解决方案
对您在 sqlalchemy 声明形式中使用的 python 对象进行更改不会强制 heroku 更新数据库。您必须手动清除数据库才能使这些更改生效。
推荐阅读
- python - 因为我将 list1 等同于 list2,所以 list1 不应该总是打印出它的原始值。但是在输出中,执行停止并返回一个错误
- sql - 计算多行SQL之间的日期差
- kubernetes - 具有完全相同 pod 标签的两个 Kubernetes 部署
- javascript - 使用本地化/语言数据覆盖制表符页码
- php - Laravel 使用下拉菜单根据用户过滤帖子
- python - 如何过量 scipy.solve_ivp solution.y_events?
- python - 字典:替换打印语句的字符(尤其是需要 [] 和逗号的值的问题)
- c++ - [C++ 中的德雷克]:在控制器中声明一个抽象输入端口以从多体工厂获取接触结果
- java - 如何创建一个 Java 肥皂服务,它使用不同的肥皂服务作为客户端并返回原始 xml 响应
- html - 图像 srcset 定义未按预期工作