当前位置: 首页 > article >正文

python远程获取数据库中的相关数据并存储至json文件

1. conn中的5个变量的含义:

① Driver:数据库驱动程序,我使用的是SQL Server数据库。

② Server:数据库所在的服务器地址。

③ Database:要连接的数据库的名称。

④ UID:登录 SQL Server 数据库的用户名。

⑤ PWD:密码。

2. prefixAll:数据模板前缀。
    handles:自定义名称。

# -*- coding:utf-8 -*-
"""
作者:青鸟飞啊555
日期:2025年01月22日
"""
import pyodbc
import json
from datetime import datetime

def fetch_data_from_db():
    conn = None
    try:
        # 连接到 SQL Server 数据库,根据实际情况修改连接信息
        conn = pyodbc.connect(
            "Driver={SQL Server};"
            "Server=xxx.xxx.x.xxx;"
            "Database=xxxx;"
            "UID=xx;"
            "PWD=xxxxxx;"
        )
        cursor = conn.cursor()
        # 执行 SQL 查询
        cursor.execute('''
            SELECT
                DISTINCT(BPERNAME),
                C.POSTNAME,
                ORGANNAME,
                (CASE WHEN B.SEX= '00' THEN '男' ELSE '女' END) AS SEX 
            FROM
                ISM_TAG AS A
                LEFT JOIN PF_EMPLOYEE AS B ON A.BPERID= B.ID
                LEFT JOIN PF_POST C ON B.POSTID = C.ID
                LEFT JOIN PF_ORGAN D ON C.ORGANID= D.ID 
            WHERE
                BPERNAME != '' 
                AND C.POSTNAME!= '' 
                AND ORGANNAME != '' 
                AND SEX != ''
        ''')
        rows = cursor.fetchall()
        data = {
            "prefixAll": "8x.5xx.7xxxx",
            "handles": []
        }
        handle_counter = 1  # 用于生成 handle 编号
        today = datetime.now().strftime("%Y%m%d")
        for row in rows:
            bpername, postname, organname, sex = row
            handle = f"test{today}{str(handle_counter).zfill(3)}"
            data["handles"].append({
                "handle": handle,
                "templateVersion": "人员测试",
                "data": [
                    {"key": "personName", "value": bpername},
                    {"key": "organName", "value": organname},
                    {"key": "bperName", "value": bpername},
                    {"key": "sex", "value": sex}
                ]
            })
            handle_counter += 1
        return data
    except pyodbc.Error as e:
        print("数据库操作错误:", e)
    finally:
        if conn:
            conn.close()


def save_data_to_json(data):
    try:
        with open('data.json', 'w+', encoding='utf-8') as file:
            json.dump(data, file, ensure_ascii=False, indent=4)
        print("数据已成功保存到 data.json 文件中。")
    except IOError as e:
        print("保存文件时出错:", e)


def main():
    data = fetch_data_from_db()
    if data:
        save_data_to_json(data)


if __name__ == "__main__":
    main()


http://www.kler.cn/a/517059.html

相关文章:

  • 如何使用 pytest-html 创建自定义 HTML 测试报告
  • Rabbitmq高级特性之消费方确认
  • SQL-leetcode—1193. 每月交易 I
  • 【程序人生】瞰谷
  • 中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)
  • 随机变量的变量替换——归一化流和直方图规定化的数学基础
  • MySQL中的关联查询:方式、区别及示例
  • Python 爬虫——爬取Web页面图片
  • 03垃圾回收篇(D3_垃圾收集器的选择及相关参数)
  • 2K高刷电竞显示器怎么选?
  • 记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
  • Django 静态文件配置实战指南
  • <keep-alive> <component ></component> </keep-alive>缓存的组件实现组件,实现组件切换时每次都执行指定方法
  • 详解Redis的Zset类型及相关命令
  • AviatorScript用法
  • 解决docker: ‘buildx‘ is not a docker command.
  • Golang初识
  • vue3中为什么引入setup,引入setup是为了解决什么问题,setup的执行时机是什么?返回值是什么
  • linux数据压缩
  • 14-6-1C++的list
  • Elixir语言的数据结构
  • 利用现有模型处理面部视频获取特征向量(4)
  • 下载Visual Studio Community 2019
  • 科技快讯 | 2025商业新愿景;豆包大模型1.5 Pro正式发布;ChatGPT每月产生260吨二氧化碳
  • jenkins-k8s pod方式动态生成slave节点
  • 3.2 Go 返回值详解