SQLAlchemy 截断列=(整数)

4 投票
1 回答
1290 浏览
提问于 2025-04-16 01:37

这里有个奇怪的问题:

我有一个反射的 SQLAlchemy 类,长得像这样:

class Install(Base):
    __tablename__ = 'install'
    id = Column(Integer, primary_key=True)
    ip_address = Column(Integer)

我用下面的方式把字符串表示的 IP 地址(比如 "1.2.3.4")转换成整数:

struct.unpack('!L', socket.inet_aton(ip_address))[0]

这个转换是有效的,我确认它能正确转换 IP 地址。不过,当我查看数据库时,发现大部分的值都被截断成了 "2147483647"。

2147483647 这个值我找不到办法阻止它被截断,我知道 MySQL 是可以处理这个的,为什么 SQLAlchemy 会把我的整数变成这样呢?

提前谢谢大家!

1 个回答

3

解决了!

对于MySQL数据库:确保你使用的是无符号的整数(unsigned INT),然后使用 mysql.MSInteger(unsigned=True) 这个类型:

from sqlalchemy.databases import mysql
[..]
class Install(Base):
    __tablename__ = 'install'
    id = Column(Integer, primary_key=True)
    ip_address = Column(mysql.MSInteger(unsigned=True))

撰写回答