python讀取文字資料寫入到資料庫及查詢優化

2021-09-23 19:11:09 字數 2952 閱讀 1300

文字資料格式

ip2int函式用於ip位址轉化為整數

int2ip函式用於整數轉化為ip位址

insert_row函式用於插入資料庫記錄

from __future__ import print_function

import torndb

def get_mysql_conn():

return torndb.connection(

host=mysql["host"] + ":" + mysql["port"],

database=mysql["database"],

user=mysql["user"],

password=mysql["password"],

charset="utf8")

mysql = 

def ip2int(ip):

try:

hexn = ''.join(["%02x" % long(i) for i in ip.split('.')])

except exception, e:

hexn = ''.join(["%02x" % long(i) for i in '0.0.0.0'.split('.')])

return long(hexn, 16)

def int2ip(n):

d = 256 * 256 * 256

q = 

while d > 0:

m,n = divmod(n,d)

d = d/256

return '.'.join(q)

def insert_row():

with open("./ipdata.csv", 'r') as fr:

lines = fr.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 = [c2, c3, c4, c5]

db = get_mysql_conn()

db.execute("start transaction")

for i in range(len(nl_p_list)/1000 + 1):

tmp_nl_p_list = nl_p_list[i*1000: (i+1)*1000]

ret = db.insertmany('insert into ipdata (startip, endip, country, carrier) values (%s, %s, %s, %s)', tmp_nl_p_list)

db.execute("commit")

if __name__ == '__main__':

insert_row()

# print(ip2int('106.39.222.36'))

with open("./ipdata.csv", 'r') as fr:

lines = fr.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 = [c2, c3, c4, c5]

import random

import time

ip_list = map(lambda x: x[1], random.sample(nl_p_list, 100))

db = get_mysql_conn()

ret_list = 

#表名sql_tmp = 'select .* from (select * from `test`.ipdata where %s>=startip order by startip desc limit 1) '

sql_list = 

#拼接乙個很長的sql

for i in range(len(ip_list)):

sql = ' union all '.join(sql_list)

t0 = time.time()

# for row in db.query(sql):

#     print(row)

dict(zip(ip_list, db.query(sql)))

t1 = time.time()

for ip in ip_list:

ret = db.get('select * from `test`.ipdata where %s>=startip order by startip desc limit 1', ip)

startip, endip = ret.get('startip'), ret.get('endip')

if startip <= ip <= endip:

else:

t2 = time.time()

print(t1-t0)

print(t2-t1)

格式化輸出字串函式format()使用字串的引數使用進行表示,0, 表示第乙個引數,1, 表示第二個引數, 以後順次遞加;

zip()函式接受任意多個(包括0個和1個)序列作為引數,返回乙個tuple列表

dict()函式是從可迭代物件來建立新字典。比如乙個元組組成的列表

python讀取文字資料寫入到資料庫及查詢優化

文字資料格式 ip2int函式用於ip位址轉化為整數 int2ip函式用於整數轉化為ip位址 insert row函式用於插入資料庫記錄 from future import print function import torndb def get mysql conn return torndb....

VC程式設計讀取文字資料

vc程式設計讀取文字資料 我們通常把資料存諸在 txt檔案上,但是我們通常要把這些資料取出來並進行處理。下面我將介紹一種在 vc 應用程式中讀取文字資料的方法。一 前言 因為經常要處理地質方面的資料。但是很多資料它不是直接存貯在資料庫檔案 如 access 檔案等 而是存貯在 txt檔案。經常有同學...

pyspark讀取hive資料寫入到redis

1 首先把redis包引入工程,這樣就不需要在集群裡每台機器上安裝redis客戶端。pip install redis cd usr local lib python3.6 dist packages 找到自己環境的路徑 zip r redis.zip redis hdfs dfs put redi...