SQLAlchemy Query to find IP from IP range in Bulk
The following code snippet shows how to make bulk query of IP from IP start and end range from a database table using SQLAlchemy in Python:
We assume that the IP start and end range are saved in the form of integers in the database.
from sqlalchemy import and_, or_
ip_addrs = [
"127.1.1.1",
"127.1.1.2",
"127.3.3.3",
"127.3.1.4"
]
filters = []
#ip addresses in integer format
ip_addrs_integer = []
query = session.query(IpTable)
for ip in ip_addrs:
ip_integer = ip_to_integer(ip)
filters.append(and_(IpTable.start_integer_ip <= ip_integer, IpTable.end_integer_ip >= ip_integer))
ip_addrs_integer.append(ip_integer)
ip_results = query.filter(or_(*filters)).limit(50).all()
for ip_integer in ip_addrs_integer:
for ip_res in ip_results:
if ip_res.start <= ip_integer and ip_res.end >= ip_integer:
ip_res.ip = integer_to_ip(ip_integer)
break
#print ip details obtain from database
for ip_detail in ip_results:
print("ip =", ip_detail.ip)
print("isp =", ip_detail.isp)
print("country =", ip_detail.country)
The above code requires conversion of IP to integer and integer to IP. Learn how to do it here.