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

使用Python3调用API写入数据库时出现空值是什么原因?

问题定位步骤

  • 先打印Python代码拼接的完整请求URL,确认参数没有空值、拼写错误、特殊字符未转义的问题
  • 打印请求返回的response.text内容,200状态码仅代表HTTP链路通了,不代表业务处理成功,接口大概率返回了你没捕获的参数缺失提示
  • 对比浏览器请求和Python请求的差异:浏览器地址栏输入URL发起的是GET请求,参数全部放在URL查询串中,你当前Python用POST方法、参数放查询串的模式不符合DbGate的接口要求,导致接口没有正确读取到传入的参数,存储过程调用时用了默认空值写入数据库。

修复方案

方案1:对齐浏览器行为,改用GET请求(改造成本最低,推荐优先验证)

不要直接拼接URL字符串,用requests自带的params参数自动处理编码,避免特殊字符导致的参数异常:

import requests
from requests_ntlm import HttpNtlmAuth

# 这里替换成你的实际基础接口地址
base_url = "https://www.myurl.com/api/mssql/dbo/uspAddLaneTimings"
db_user = "你的数据库用户名"
db_password = "你的数据库密码"

def setup_http_request(rfidUniqueId, mac_address, my_id_count):
    send_http_request(base_url, rfidUniqueId, mac_address, my_id_count)

def send_http_request(base_url, rfidUniqueId, mac_address, my_id_count):
    try:
        auth = HttpNtlmAuth(db_user, db_password)
        # 用params传查询参数,自动做URL编码
        response = requests.get(
            base_url,
            params={
                "laneSequence": my_id_count,
                "rfidUniqueId": rfidUniqueId,
                "planningLaneSeq": my_id_count,
                "sensorId": mac_address
            },
            auth=auth
        )
        # 打印返回内容验证结果
        print("返回状态码:", response.status_code)
        print("返回内容:", response.text)
    except Exception as e:
        print("请求出错:", str(e))

方案2:如果业务要求必须用POST请求,参数放在请求体中传输

DbGate的POST接口默认从请求体中读取参数,不要拼在URL里:

import requests
from requests_ntlm import HttpNtlmAuth

base_url = "https://www.myurl.com/api/mssql/dbo/uspAddLaneTimings"
db_user = "你的数据库用户名"
db_password = "你的数据库密码"

def setup_http_request(rfidUniqueId, mac_address, my_id_count):
    send_http_request(base_url, rfidUniqueId, mac_address, my_id_count)

def send_http_request(base_url, rfidUniqueId, mac_address, my_id_count):
    try:
        auth = HttpNtlmAuth(db_user, db_password)
        payload = {
            "laneSequence": my_id_count,
            "rfidUniqueId": rfidUniqueId,
            "planningLaneSeq": my_id_count,
            "sensorId": mac_address
        }
        # 用json格式传POST参数
        response = requests.post(
            base_url,
            json=payload,
            auth=auth
        )
        print("返回状态码:", response.status_code)
        print("返回内容:", response.text)
    except Exception as e:
        print("请求出错:", str(e))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:42:03