You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python项目环境适配求助:SharePoint与Oracle跨32/64位兼容问题

解决方案:Python跨位数环境兼容与32位连接SharePoint问题

一、跨位数Python环境的可靠运行方案

32位和64位Python的编译架构不同,模块无法直接互相导入,必须通过进程隔离或服务化调用实现协作:

1. 独立脚本+子进程调用

把Oracle和SharePoint的逻辑拆成独立脚本,主脚本通过subprocess调用对应位数的Python解释器执行,用JSON或临时文件传递数据:

  • 主脚本调用示例:
import subprocess
import json

# 替换成你的32位/64位Python路径
python_32 = r"C:\Python38-32\python.exe"
python_64 = r"C:\Python38\python.exe"

# 调用32位Oracle脚本获取数据
oracle_result = subprocess.run(
    [python_32, "oracle_service.py", "--query", "SELECT * FROM user_table"],
    capture_output=True,
    text=True
)
if oracle_result.returncode == 0:
    oracle_data = json.loads(oracle_result.stdout)
else:
    print(f"Oracle执行出错: {oracle_result.stderr}")

# 调用64位SharePoint脚本获取数据
sp_result = subprocess.run(
    [python_64, "sharepoint_service.py", "--list-id", "your-list-guid"],
    capture_output=True,
    text=True
)
if sp_result.returncode == 0:
    sp_data = json.loads(sp_result.stdout)
else:
    print(f"SharePoint执行出错: {sp_result.stderr}")
  • 子脚本示例(oracle_service.py):
import sys
import json
from oracle import OracleCon

def main():
    query = sys.argv[2]
    con = OracleCon()
    data = con.fetch_data(query)
    print(json.dumps(data))

if __name__ == "__main__":
    main()

2. 本地轻量API服务

把两个功能做成独立的Flask/FastAPI服务,运行在不同端口,主脚本通过HTTP请求调用:

  • 32位Oracle服务(oracle_api.py):
from flask import Flask, request, jsonify
from oracle import OracleCon

app = Flask(__name__)
db_con = OracleCon()

@app.route("/fetch", methods=["POST"])
def fetch_oracle():
    query = request.json.get("query")
    data = db_con.execute(query)
    return jsonify(data)

if __name__ == "__main__":
    app.run(port=5000, debug=False)
  • 64位SharePoint服务(sharepoint_api.py):
from flask import Flask, request, jsonify
from sharepoint import SharePointCon

app = Flask(__name__)
sp_con = SharePointCon()

@app.route("/get-list", methods=["GET"])
def get_sp_list():
    list_id = request.args.get("list-id")
    data = sp_con.get_items(list_id)
    return jsonify(data)

if __name__ == "__main__":
    app.run(port=5001, debug=False)
  • 主脚本调用:
import requests

# 获取Oracle数据
oracle_res = requests.post("http://localhost:5000/fetch", json={"query": "SELECT * FROM table"})
oracle_data = oracle_res.json()

# 获取SharePoint数据
sp_res = requests.get("http://localhost:5001/get-list", params={"list-id": "your-guid"})
sp_data = sp_res.json()

二、32位Python连接SharePoint的可行方法

放弃依赖位数的OLEDB驱动,改用跨位数兼容的REST API或专用库:

1. 直接调用SharePoint REST API

通过HTTP请求操作SharePoint,无需额外驱动,32/64位通用:

import requests
from requests_ntlm import HttpNtlmAuth  # 针对On-Premises版本,Online用OAuth2

site_url = "https://your-sharepoint-site.com/sites/team-site"
list_id = "your-list-guid"
api_endpoint = f"{site_url}/_api/web/lists(guid'{list_id}')/items"

# NTLM认证(根据你的环境调整,比如Online用azure-identity)
auth = HttpNtlmAuth("domain\\username", "your-password")
headers = {"Accept": "application/json;odata=verbose"}

response = requests.get(api_endpoint, auth=auth, headers=headers)
if response.status_code == 200:
    items = response.json()["d"]["results"]
    for item in items:
        print(item["Title"])  # 替换成你的列表字段
else:
    print(f"请求失败: {response.status_code} - {response.text}")

2. 使用shareplum库(32位兼容)

专门封装SharePoint操作的Python库,基于REST API,无需OLEDB:

  • 安装:pip install shareplum
  • 示例代码:
from shareplum import Site
from shareplum.site import Version

# 连接SharePoint站点
site = Site(
    "https://your-sharepoint-site.com/sites/team-site",
    version=Version.v365,  # 根据版本选v2013/v2016/v365
    auth=("domain\\username", "your-password")
)

# 获取列表数据
sp_list = site.List("你的列表名称")
items = sp_list.GetListItems()

# 处理数据
for item in items:
    print(item.get("Title"))

内容的提问来源于stack exchange,提问作者jgabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:11:31