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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值