1.第三方公众号用户openId是否有效
场景: 第三方公众号授权给了我们,第一次授权了正确的公众号,第二次错误的被人授权了另外一个小的公众号,最后重新授权了正确的公众号,需要验证哪些用户存储的openId无效
2.分库分表暴力查询
场景:数据分成了两个库,每个库有256张分表,总表中的数据丢失了,需要去分表中确定数据所在的分库和分表
值得注意的是,java中用abs(f_uuid.hashCode()%256)去决定分表所在的位置,python实现java的hash方法以后%256可能会有不同的结果,因为哈希值是负数,例如java中abs(-1271147967%256)=abs(-191)=191,但是python中-1271147967%256=65,如果abs(-1271147967)%256=191, 191+65=256
import pymysql.cursors
hosts = 'db1','db2'
for i in range(0,2):
# 连接数据库
connect = pymysql.Connect(
host=hosts[i],
port=3306,
user='root',
passwd='test',
db='test',
charset='utf8'
)
# 获取游标
cursor = connect.cursor()
for j in range(0, 256):
# 查询数据
sql = "SELECT * FROM t_info_{0:03d} WHERE valid = 1 and company = '%s' ".format(j)
data = ('总部')
cursor.execute(sql % data)
for row in cursor.fetchall():
print(str(row))
if(cursor.rowcount > 0):
print('在数据库{0}的表t_info_{1:03d}中找到了数据'.format(hosts[i],j))
# 关闭连接
cursor.close()
connect.close()
表数据很大时,换另外一种游标pymysql.cursors.SSCursor,逐行获取
import pymysql.cursors
hosts = 'db1','db2'
for i in range(0,2):
# 连接数据库
connect = pymysql.Connect(
host=hosts[i],
port=3306,
user='root',
passwd='test',
db='test',
charset='utf8'
)
# 获取游标
cursor = pymysql.cursors.SSCursor(connect)
for j in range(0, 256):
# 查询数据
sql = "SELECT * FROM t_info_{0:03d} WHERE valid = 1 and company = '%s' ".format(j)
data = ('总部')
cursor.execute(sql % data)
while True:
row = cursor.fetchone()
if not row:
break
print(str(row))
print('在数据库{0}的表t_info_{1:03d}中找到了数据'.format(hosts[i],j))
break
# 关闭连接
cursor.close()
connect.close()
3.Excel中有很多项目ID,从ES中查询每个项目包含的记录数
#coding=utf-8
import requests
import os
import json
from xlrd import open_workbook
from xlutils.copy import copy
def base_dir(filename=None):
return os.path.join(os.path.dirname(__file__),filename)
if __name__ == '__main__':
api_url = 'http://esadmin.***.com/index_project/project/_search'
# rb打开该excel,formatting_info=True表示打开excel时并保存原有的格式
wb = open_workbook('./project.xlsx', formatting_info=True)
sheet1 = wb.sheet_by_index(0)
api_header = {
'Content-Type': 'application/json'
}
# 复制原文件,因为原文件只能读取,不能写入数据,所以要复制得到一个可以写入数据的文件
newwb = copy(wb)
# 获取可写文件的第一张表单
newsheet1 = newwb.get_sheet(0)
for row in range(1,sheet1.nrows):
if len(sheet1.cell(row, 1).value)>0:
api_data = {"query":{"bool":{"must":[{"term":{"projectId":sheet1.cell(row, 1).value}},{"range":{"monthId":{"lte":187,"gte":187}}}]}},"from":0,"size":0}
print(api_header, api_data, api_url)
try:
suc = requests.post(url=api_url, headers=api_header, json=api_data, verify=False, timeout=8)
suc = suc.json()
print(suc)
newsheet1.write(row, 2, suc["hits"]["total"])
except requests.exceptions.ReadTimeout:
print("timeout.........")
except:
print("error")
newwb.save('project_result.xls')