# coding = utf-8 import mysql.connector def login_sql(): conn = mysql.connector.connect(user='root', password='admin', database='test') return conn def ip2int(ip): try: # % X表示è¾åº16è¿å¶å½¢å¼ï¼ä½¿ç¨Aï½Fç大ååç¬¦ï¼æ¯å¦15å°±è¾åºF # % 02 X表示è¾åºç16è¿å¶ä½¿ç¨ä¸¤ä¸ªä½ç½®ï¼å¦æåªæä¸ä½çå颿·»0ï¼æ¯å¦15å°±è¾åº0F hexn = ''.join(["%02X" % int(i) for i in ip.split('.')]) except BaseException: hexn = ''.join(["%02X" % int(i) for i in '0.0.0.0'.split('.')]) return int(hexn, 16) #è½®å # import struct,socket # return struct.unpack("!I",socket.inet_aton(ip))[0] def int2ip(n): d = 256 * 256 * 256 q = [] while d > 0: # æé¤æ°å使°è¿ç®ç»æç»åèµ·æ¥ï¼è¿åä¸ä¸ªå å«åå使°çå ç» m, n = divmod(n, d) q.append(str(m)) d = d / 256 return '.'.join(q) # è½®å # import socket, struct # return socket.inet_ntoa(struct.pack("!I", n)) def insert_row(): conn = mysql.connector.connect(user='root', password='admin', database='test') # æå®ç¼ç æ ¼å¼ with open('./ipdata.csv', 'r', encoding='utf-8') as f: lines = f.readlines() nl_p_list = [] for l in lines: # æå®å岿¬¡æ°ï¼å¹¶å°æ°æ®ä¸çç©ºæ ¼å é¤ ls = l.strip().split(',', 4) # print(l) # print(*ls) # assert len(ls) == 5 c1, c2, c3, c4, c5 = ls[0], ip2int(ls[1]), ip2int(ls[2]), ls[3], ls[4] nl = [c1, c2, c3, c4, c5] nl_p_list.append(nl) # print(nl) # è¿æ¥æ°æ®æ°æ®åºæ¸¸æ cursor = conn.cursor() # ret = cursor.executemany('insert into ipdata (id, startip, endip, country, carrier) values (%s, %s, %s, %s, %s)', # nl_p_list) for i in range(int(len(nl_p_list) / 1000 + 1)): tmp_nl_p_list = nl_p_list[i * 1000: (i + 1) * 1000] # print(tmp_nl_p_list[i][0] + ': ' + tmp_nl_p_list[i][4]) # æ¹éæå ¥è¡¨ä¸ ret = cursor.executemany( 'insert into ipdata (id, startip, endip, country, carrier) values (%s, %s, %s, %s, %s)', tmp_nl_p_list) # æäº¤äºå¡;å ³éæ°æ®åºè¿æ¥ conn.commit() conn.close() if __name__ == '__main__': # print(ip2int('127.0.0.1')) # print("%02X" % int(126)) # print(int('0', 16)) # print(int2ip(ip2int('127.0.0.1'))) with open('./ipdata.csv', 'r', encoding='utf-8') as f: lines = f.readlines() nl_p_list = [] for l in lines: ls = l.strip().split(',', 4) c1, c2, c3, c4, c5 = ls[0], ip2int(ls[1]), ip2int(ls[2]), ls[3], ls[4] nl = [c1, c2, c3, c4, c5] nl_p_list.append(nl) import random import time ip_list = list(map(lambda x: x[1], random.sample(nl_p_list, 100))) conn = login_sql() #é¿å mysql.connector InternalError: Unread result found éè¯¯ï¼ æ·»å åæ° cursor = conn.cursor(buffered=True) # cursor.execute('SELECT * FROM ipdata WHERE 1780997668 BETWEEN startip AND endip') ret_list = [] sql_list = [] sql_list2 = [] sql_str = 'SELECT {0}.* FROM (SELECT * FROM ipdata WHERE %s >= startip ORDER BY startip DESC LIMIT 1) {0}' sql_str2 = 'SELECT {0}.* FROM (SELECT * FROM ipdata WHERE %s BETWEEN startip AND endip) {0}' for i in range(len(ip_list)): sql_list.append(sql_str.format('t' + str(i)) % ip_list[i]) sql_list2.append(sql_str2.format('t' + str(i)) % ip_list[i]) # for i in range(len(sql_list)): # print(sql_list[i]) # æ¼æ¥ SQL è¯å¥ sql = ' union all '.join(sql_list) sql2 = ' union all '.join(sql_list2) # zip() 彿°æ¥åä»»æå¤ä¸ªï¼å æ¬0个å1个ï¼åºåä½ä¸ºåæ°ï¼è¿åä¸ä¸ªtupleå表 # dict() 彿°æ¯ä»å¯è¿ä»£å¯¹è±¡æ¥å建æ°åå ¸ãæ¯å¦ä¸ä¸ªå ç»ç»æçå表 # print(sql) t0 = time.time() # dict(zip(ip_list, cursor.execute(sql))) cursor.execute(sql) t1 = time.time() # for i in ip_list: # cursor.execute('SELECT * FROM ipdata WHERE %s >= startip ORDER BY startip DESC LIMIT 1' % i) # result = cursor.fetchall() # startip, endip = result[0][1], result[0][2] # if startip <= i <= endip: # ret_list.append((i, result[0][3])) # else: # ret_list.append((i, u'unknown')) # print(result[0][1]+ ' str ' + result[0][2]) t2 = time.time() # for i in ip_list: # cursor.execute('SELECT * FROM ipdata WHERE %s BETWEEN startip AND endip' % i) # result = cursor.fetchall() t3 = time.time() # cursor.execute(sql2) t4 = time.time() print(t1 - t0) print(t2 - t1) print(t4 - t3) print(t3 - t2) cursor.close() conn.close()