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