python查询日志,并组装sql,修复缺失的数据

Python中数据库操作报错的排查与修复 连接管理使用连接池(如SQLAlchemy的QueuePool)避免资源耗尽。操作完成后显式关闭连接(推荐with语句)。SQL安全禁止字符串拼接SQL,始终使用参数化查询。ORM操作时检查表名大小写与数据库一致。错误处理捕获特定异常(如DataError)而非通用Exception。使用日志分级记录错误(DEBUG/INFO/WARNING/ERROR)。性能监控配置MySQL慢查询日志,优化超过阈值的SQL。在Python代码中监控查询耗时,设置超时告警。 阅读详情

前言

由于mysql链接超时波动,导致数据缺失,需要根据日志填补数据

流程

获取确实数据的订单列表

搜索日志,获取请求日志

根据请求日志拼装sql

打印sql供修复数据

代码

因为我们日志打印的有问题,所以这里用字符串截取获取入参。如果日志打印的是标准json,直接搞json即可

from elasticsearch import Elasticsearch
import json

class MyUtils:
    pass

    def getValue(fullStr, beginStr, endStr):
        start = fullStr.find(beginStr) + len(beginStr)
        end = fullStr.find(endStr)
        value = fullStr[start:end]
        return value


    def setValue(orderInfoExt, columnName, fullStr, beginStr, endStr):
        value = MyUtils.getValue(fullStr, beginStr, endStr)
        if value != 'null':
            orderInfoExt[columnName] = value


es = Elasticsearch(hosts="http://xxx:9200/", http_auth=('xxx', 'xxx'))
scroll_id = None
fileName = "create-order-info" + ".txt"
orderIdList = [74xxxx574,
               74xxxx822
              ]
orderExtInfoList = []




for orderId in orderIdList:
    query_json = {
        "_source": ["message", "logger_name", "@timestamp"],
        "query": {
            "bool": {
                "filter":
                    [
                        {
                            "bool":
                                {
                                    "filter":
                                        [
                                            {
                                                "multi_match":
                                                    {
                                                        "lenient": True,
                                                        "query": "order/v1/createOrder",
                                                        "type": "phrase"
                                                    }
                                            },
                                            {
                                                "multi_match":
                                                    {
                                                        "lenient": True,
                                                        "query": orderId,
                                                        "type": "phrase"
                                                    }
                                            }
                                        ]
                                }
                        },
                        {
                            "range":
                                {
                                    "@timestamp":
                                        {
                                            "format": "strict_date_optional_time",
                                            "gte": "2024-11-01T00:00:00.000Z",
                                            "lte": "2024-11-02T10:00:00.000Z"
                                        }
                                }
                        }
                    ],
                "must":
                    [
                    ],
                "must_not":
                    [
                    ],
                "should":
                    [
                    ]
            }
        }
    }
    query = es.search(index='xxxx-pro*', body=query_json, scroll='25m', size=5000,
                      request_timeout=2000000)

    for k in query['hits']['hits']:
        timestr = k['_source']['@timestamp']
        request = k['_source']['message']
        orderInfoExt = {}
        #beancopy的字段
        MyUtils.setValue(orderInfoExt, 'user_device_mac', request, "userDeviceMac=", ", userDeviceImei")
        MyUtils.setValue(orderInfoExt, 'user_device_imei', request, "userDeviceImei=", ", userDeviceImsi")

        #特殊的字段

        MyUtils.setValue(orderInfoExt, 'order_id', request, "orderId=", ", oid")
        MyUtils.setValue(orderInfoExt, 'user_order_ip', request, "userIpAddr=", ", userPort")
        #print(orderInfoExt)
        orderExtInfoList.append(orderInfoExt)
# 假设表名为 orders
table_name = 'order_info_ext'
for orderInfoExt in orderExtInfoList:
    # 提取列名
    columns = ', '.join(orderInfoExt.keys())
    # 提取值,并处理为适当的格式
    values = []
    for key, value in orderInfoExt.items():
        if value == 'null':
            values.append('NULL')
        elif isinstance(value, (int, float)):
            values.append(str(value))
        elif isinstance(value, str):
            values.append("'"+value+"'")
        else:
            values.append('NULL')

    # 构建 INSERT 语句
    sql = f"INSERT INTO {table_name} ({columns}) VALUES ({', '.join(values)});"

    print(sql)




红帆OA SQL注入漏洞实战:从手工探测到自动化利用与修复 SQL注入是一种经典的Web安全漏洞,其原理在于攻击者能够通过构造恶意输入,改变后端数据库查询语句的原始逻辑,从而执行非预期的SQL命令。这种漏洞的技术价值在于它直接威胁到数据库的机密性、完整性和可用性,可能导致敏感数据泄露、数据篡改甚至服务器被完全控制。在应用场景上,SQL注入常见于存在用户交互且后端采用动态SQL拼接的Web系统,如OA办公平台、内容管理系统、电子商务网站等。本文以红帆OA系统为例,深入剖析了其公告模块、通讯录搜索及排序参数等多处存在的SQL注入风险,详细演示了如何通过手工探测(如布尔盲 阅读详情

相关推荐

数据分析入门:Excel、SQL、Tableau、Python免费自学路径全解析

这次我们来看一个面向数据分析初学者的免费自学课程资源。这套名为“【全99集】最良心的数据分析自学免费课程”的系列,覆盖了从Excel、SQL、Tableau到Python的核心技能栈,并延伸至求职、简历面试、产品分析及大厂报告制作等实战环节。对于想零成本入门或系统转行数据分析的人来说,这是一个结构清晰、内容全面的学习路径参考。 课程的核心价值在于其整合性。它没有停留在单一工具的教学上,而是将数据分析的完整工作流串联起来:从数据获取与清洗(SQL),到数据处理与分析(Excel/Python),再到数据可视化

dilv4062的博客 477

只用js实现mybatis输出日志带问号的sql和参数的组装

之前写了一个工具也是实现这个功能,但是只能单个复制,用起来很麻烦。 经过一番改进之后,终于可以实现批量的组装sql了。 使用只需3步,复制、粘贴、点击生成

MeiLi_chenai的博客 1050

某通电子文档系统SQL注入漏洞复现与修复:从手工探测到自动化POC

SQL注入是一种将恶意SQL代码插入到应用输入参数中,从而操纵后端数据库查询的常见Web安全漏洞。其核心原理在于应用程序未对用户输入进行充分验证和过滤,导致数据与代码边界模糊,攻击者能够执行非预期的数据库操作。这项技术的危害在于可能引发数据泄露、权限绕过甚至系统完全沦陷,在权限管理、审批流等核心业务接口中风险尤为突出。通过手工注入探测与自动化POC编写,安全研究人员可以系统性地验证漏洞存在性,例如针对某通电子文档安全管理系统的CDGAuthoriseTempletService1接口进行复现。掌握SQL注入

weixin_30475039的博客 415

mybatis日志在线生成sql(日志参数填充,sql日志格式化)

背景:平时我们在看线上日志的时候,想知道一条执行sql的结果,需要把mybatis生成的日志copy出来,然后把参数一条条手动塞进去,简单sql还好,如果是复杂sql,尤其参数多达几十甚至上百个情况,这就头大.不仅非常耗时,而且容易出错. 针对上面出现的问题,我开发出了在线一键生成mybatis执行sql的网站,只需要把日志copy出来,点击一键转换就能轻松获得参数填充好的sql,大大节省了日志分析时间. 下面是使用方法: 1.将Preparing:日志copy出来,粘贴到Preparing.

孤山听雨的博客 4268

PDF转SQL数据库:用LangChain SQL Agent实现产品文档智能查询

在企业知识管理中,非结构化PDF文档(如产品手册、技术白皮书)长期面临检索不准、分析无力的困境。传统RAG依赖语义匹配,难以支撑JOIN、GROUP BY、聚合统计等确定性计算需求。本文聚焦‘PDF结构化解析→关系型建模→自然语言查库’技术路径,基于大模型函数调用(Function Calling)实现高精度JSON Schema驱动的数据抽取,结合SQLite轻量建模与LangChain SQL Agent的自我修复式SQL生成能力,将文档转化为可验证、可关联、可扩展的本地数据库。方案兼顾工程落地性与成本

weixin_30902251的博客 392

数据库语义查询编译器:让LLM原生理解SQL与业务知识

数据库作为企业核心数据资产,其结构化、强一致性、高安全性特征决定了AI赋能不能依赖外部向量检索或黑盒大模型封装。真正的智能应源于对Schema语义的深度理解与实时查询编译能力——即让自然语言提问自动转化为可审计、可追溯、带权限控制与质量校验的标准化SQL。该范式以语义图谱构建为基础,通过查询编译层(SQC)实现意图解析、Schema感知生成与执行态知识注入,并依托Model Context Protocol(MCP)保障调用可追踪、错误可定位、知识可版本化。它不迁移数据、不改造内核、不牺牲实时性,适用于Or

chouzu8463的博客 416

AI代码审查实战:从SQL注入到N+1查询的BUG修复指南

代码审查是软件工程中保障代码质量、发现潜在缺陷的核心实践。其原理在于通过系统性的检查,识别逻辑错误、安全漏洞和性能问题,从而提升软件的可靠性与可维护性。在AI辅助编程日益普及的背景下,对AI生成代码的审查尤为重要,因为AI可能因上下文理解不足而引入隐蔽的BUG,例如SQL注入和资源泄漏。通过结合静态分析工具(如Pylint、Bandit)进行安全扫描,以及动态调试与单元测试进行验证,开发者可以构建一套高效的审查工作流。本文以典型的AI生成代码片段为例,深入演示了如何系统性地识别并修复其中的SQL注入、N+1

weixin_30423977的博客 434

SQL+Python+R数据管道实战:从数据库连接到故障排查

SQL是数据工程的底层协议,如同网络中的TCP/IP,负责精准定位与提取原始数据;Python和R则作为上层分析语言,通过Pandas、dplyr等工具对SQL结果进行加工与建模。掌握数据库连接原理(如SQLite文件锁、MySQL握手认证、PostgreSQL连接参数契约)、建表约束设计、索引优化策略及查询执行计划解读,是构建高性能数据管道的技术基础。在真实场景中,这些能力直接支撑ETL开发、实时看板响应、跨系统数据协同等关键任务。本文聚焦SQL与Python/R协同实践,覆盖SQLite/MySQL/P

weixin_33675507的博客 329

揭秘Python数据库连接超时:5分钟快速定位并修复问题

快速解决数据库连接超时Python难题,涵盖常见场景如Web应用与爬虫。通过调整连接池、设置超时参数、优化网络配置等方法,5分钟定位并修复问题,提升程序稳定性,值得收藏。

FastDebug的博客 1029

零基础网络安全入门:数据库与SQL核心实战指南

数据库作为现代信息系统的核心数据存储与管理组件,其结构化查询语言(SQL)是实现数据交互的通用标准。从技术原理上看,SQL通过定义、操纵和控制数据,支撑着各类应用的业务逻辑。在网络安全领域,掌握数据库与SQL不仅关乎日常运维的效率,更是理解攻击面、实施有效防御的基石。例如,SQL注入漏洞的成因与防范,直接关联到应用程序如何安全地处理用户输入与数据库查询。在渗透测试、安全运维、数据保护等实际应用场景中,数据库技能是进行信息收集、日志分析、溯源取证乃至漏洞利用的关键。本文聚焦于网络安全工程师的实战需求,通过搭建

weixin_30675247的博客 482

企业级SQL注入漏洞深度剖析:从原理到修复的完整实战指南

SQL注入作为Web安全领域的经典漏洞,其核心原理在于应用程序未严格区分数据与代码,导致用户输入被误执行为数据库指令。这种漏洞源于动态SQL拼接与输入验证缺失,使得攻击者能够操纵数据库查询逻辑,从而引发数据泄露、权限提升乃至系统沦陷等严重后果。在企业级应用如ERP、CRM系统中,由于业务逻辑复杂、历史代码众多,SQL注入往往成为高危风险点。通过手工探测结合自动化工具(如SQLMap),安全人员可以系统性地验证漏洞存在、提取敏感信息并评估潜在危害。而根本的防御之道在于代码层采用预编译语句(PreparedSt

weixin_30832405的博客 343

按TraceID分组查询Profile数据

若需要更简洁的函数名,可根据项目命名习惯简化为。(强调“分组”动作)或。(强调“查询”动作)。

Leon_Jinhai_Sun的博客 438

SQL注入攻防全解析:从原理到实战防御策略

SQL注入是一种将用户输入的数据作为代码执行的Web安全漏洞,其核心原理在于程序未能严格区分数据与代码的边界。攻击者通过构造恶意输入,可以绕过应用程序的验证逻辑,直接操作数据库,实现数据窃取、权限提升甚至系统控制。这项技术因其原理简单、破坏力强,长期位列OWASP Top 10安全风险榜首。在工程实践中,防御SQL注入的关键在于采用参数化查询(预编译语句),这能从根本上确保用户输入被当作数据处理。同时,结合输入验证、最小权限原则以及WAF等纵深防御措施,能有效构建安全防线。本文聚焦SQL注入的常见攻击手法如

weixin_30470643的博客 427

VIM缺失值可视化:用R语言诊断数据质量模式

缺失值分析是数据质量治理的基础环节,其核心在于理解缺失机制(MCAR/MAR/MNAR)而非简单统计比例。VIM作为R语言中专为缺失值诊断设计的成熟工具包,通过aggr()聚合图、matrix()缺失矩阵、corrplot()相关性热力图等标准化视图,将抽象的NA分布转化为可解释的结构化模式。它支持基于Jaccard距离的样本聚类、缺失指示变量的边际分布建模,以及多变量交互的scattterplot分析,显著优于通用可视化库如ggplot2或Python的missingno。在电商、医疗、金融等多行业实践中

aiqixiao2017的博客 396

AI时代SQL复兴:结构化查询如何成为大模型应用的中枢引擎

SQL作为最成熟的关系型数据操作语言,其声明式范式、确定性执行、细粒度权限与工业级优化能力,在AI工程化落地中不可替代。当大模型处理非结构化数据时,SQL承担起元数据治理、RAG路由、向量混合查询、训练数据清洗、AI可观测性与合规审查等关键角色,成为连接业务语义、数据底座与LLM能力的通用接口协议。尤其在向量数据库与RAG系统中,SQL前置过滤显著提升检索效率与结果可信度,而LLM+SQL的自然语言到结构化查询转换,正降低AI应用的使用门槛。本文聚焦SQL在AI工作流中的六大生产级落地场景与性能调优实践。

weixin_33938733的博客 408

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1651

如何用AI自动修复ODBC驱动错误?快马平台一键生成解决方案

运行生成的脚本后,发现系统确实缺少SQL Server Native Client驱动。脚本不仅给出了下载链接,还提供了自动安装的PowerShell命令。这个错误表明系统找不到指定的数据源名称(DSN),且没有设置默认驱动。从问题发现到解决方案上线,全程不需要处理服务器配置,特别适合快速验证想法。平台提供的AI辅助编程功能,让即使不熟悉ODBC的开发者也能够快速解决问题。这个问题通常出现在数据库连接配置不正确或驱动缺失的情况下。的AI对话区输入错误信息后,平台自动生成了一个Python诊断脚本框架。

BlackironLynx23的博客 896

史上最强量化工具库 Ta-Lib 从入门到精通,一篇文章就够了!

Ta-Lib 提供的 13 个关键指标,并配上详细的代码示例,确保你看完就能直接上手!🔥。

奔跑的蜗牛 9915

数据分析入门全链路:Excel/SQL/Tableau/Python免费课程与实战指南

这次我们来看一个面向数据分析初学者的免费自学课程合集。这个系列课程号称“最良心”,因为它完全免费,并且系统性地覆盖了从数据工具(Excel、SQL、Tableau、Python)到求职实战(简历、面试、大厂分析报告)的全链路技能。对于想转行数据分析、在校学生希望补充技能、或者业务人员想提升数据能力的读者来说,这是一个值得花时间评估的资源。 课程的核心价值在于其整合性。它不是零散的教程,而是将数据分析师岗位所需的四大核心工具(Excel、SQL、Tableau、Python)与求职、报告制作等软技能打包在一起

weixin_34401479的博客 474

【PCIe 总线及设备入门学习专栏 3.2.2 -- PCIe 中什么是 SR-IOV】

SR-IOV(Single Root I/O Virtualization)是 PCIe 规范中的一种技术,允许物理 PCIe 设备(称为 Physical Function, PF)虚拟化为多个虚拟设备(称为 Virtual Functions, VFs),使多个操作系统或虚拟机能够共享同一个物理设备。SR-IOV:一种 PCIe 虚拟化技术,允许将一个物理 PCIe 设备虚拟化为多个虚拟设备。:物理设备的主要管理接口。:PF 的轻量级副本,分配给虚拟机或操作系统。

CodingCos的博客 1513

chembl_webresource_client 包数据接口下载chembl数据库;ZINC数据库下载、simles获取

点击进去https://zinc.docking.org/subclasses/kinase/predictions/,然后下载sdf模式,这里可以转化simles格式,如果下载csv里面没有包含simles。参考:https://github.com/chembl/chembl_webresource_client/blob/master/demo_wrc.ipynb。参考:https://zinc.docking.org/这是网页搜索查看,16条数据。这个数据这下载特别慢。

weixin_42357472的博客 3044
上一篇: 获取配置的shardingsphere分库分表的数据库链接,并连接每个分库分表执行数据归档逻辑
下一篇: 通过注解控制是否打印日志
bxp1321
博客等级 码龄17年 146粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值