python脚本批量查询验证

本文介绍如何验证第三方公众号用户的OpenId有效性,并提供了一种暴力查询分库分表的方法来查找丢失的数据。此外,还展示了如何从Elasticsearch中批量查询Excel中的项目ID对应的记录数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值