大佬教程收集整理的这篇文章主要介绍了QQwry到Sqlite3(续),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
'''
Created on 2010-5-4
@author: Ben
@mail: ben.pang.china@gmail.com ''' import os,sys,re import sqlite3 from converter import b2I,dbname def int2Ip(i): """IP字符串转换成IP对象""" i = int(i) return IP( "{}.{}.{}.{}".format( i >> 24,i >> 16 & 0xFF,i >> 8 & 0xFF,i & 0xFF ) ) def ip2Int(ip): """IP字符串转换成Integer""" if ipm.match(ip): return b2I( reversed(List( map( int,ip.split(".") ) )) ) # local variables ipm = re.compile( "^((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)$" ) conn = None def init(): global conn sqlite3.register_converter("ip",int2Ip) conn = sqlite3.connect(dbname,detect_types = sqlite3.PARSE_ColnameS); class IP: def __init__(self,ip): """IP类,存放IP地址,并验证IP字符串是否有效""" if not ipm.match(ip): raise ValueError( "invalID ip value:" + ip ) self.ip = ip def __str__(self): return self.ip if __name__ == '__main__': if os.path.exists(dbName) and len(sys.argv) == 2 and ipm.match(sys.argv[1]): init() cur = conn.cursor() cur.execute(""" SELECT start_ip as "s [ip]",end_ip as "e [ip]",country.name,area.name FROM ipaddr,country,area WHERE (? betweeN start_ip AND end_ip) AND cID = country.ID AND aID = area.ID; """,(ip2Int(sys.argv[1]),) ) for r in cur: print(""" start ip: {} ~ {} {} """.format(*r)) conn.close() else: print("not found ipdb for" + dbname,file = sys.stderr )
CREATE table IF NOT EXISTS country ( ID IntegeR PRIMary KEY,@R_338_4687@T NOT NulL UNIQUE ); CREATE table IF NOT EXISTS area ( ID IntegeR PRIMary KEY,@R_338_4687@T NOT NulL UNIQUE ); CREATE table IF NOT EXISTS ipaddr ( start_ip IntegeR PRIMARK KEY,end_ip IntegeR NOT NulL UNIQUE,cID IntegeR NOT NulL,aID IntegeR DEFAulT NulL ); CREATE INDEX IF NOT EXISTS ipIDx ON ipaddr (start_ip,end_ip)
OK.
以上是大佬教程为你收集整理的QQwry到Sqlite3(续)全部内容,希望文章能够帮你解决QQwry到Sqlite3(续)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。