Sqlalchemy将十进制IP地址更改为点线

时间:2013-08-16 10:11:44

标签: sqlalchemy python-3.2

我在SQLAlchemy中有一个表,其列为IPaddress,以十进制格式表示。 如何更改它以显示虚线格式?

1 个答案:

答案 0 :(得分:1)

从DB获取十进制值并在Python代码中进行转换。安装IPy模块并执行以下操作:

from IPy import IP
ip_dotted = str(IP(ip_dec))

如果你使用的是Python 3.3,stdlib中有ipaddress

from ipaddress import ip_address
ip_dotted = str(ip_address(ip_dec))

如果使用的RDBMS是PostgreSQL,则可以在DB级别进行转换:

from sqlalchemy.sql import cast, func
from sqlalchemy.dialects.postgresql import INET

session.query(func.host(cast('0.0.0.0', INET) + SomeTable.ip_dec)).scalar()

最后,您可以自己进行计算,因此不会对特定库,Python版本或RDBMS有任何依赖性:

segments = []
# From 3 to 0.
for n in range(3, -1, -1):
    p = 256 ** n
    segments.append(str(ip_dec // p))
    ip_dec %= p
ip_dotted = '.'.join(segments)
相关问题