Почему моя база данных получает нулевые значения? Публикация в API с использованием Python3

#sql-server #python-3.x

Вопрос:

Я видел пару ответов на этот вопрос, но ни одно из предложенных решений не похоже на мою конкретную настройку. Я отправляю значения в базу данных с помощью Api, называемого DbGate. Формат, который я отправляю из браузера, выглядит следующим образом:

 https://www.myurl.com/api/mssql/dbo/uspAddLaneTimings?laneSequence=2amp;rfidUniqueId=020047D0C653amp;planningLaneSeq=1amp;sensorId=202481599234152
 

Когда я запускаю это, введя URL-адрес в Chrome на своем компьютере или используя Chromium на своем Raspberry Pi, это работает нормально.
Данные правильно размещены в моей таблице, и браузер отвечает идентификатором добавленной записи:

 {"value":[{"ID":18}]}
 

Я пытаюсь отправить запрос POST с RaspBerry Pi с помощью Python3. Это мой первый в истории проект на Python.

SQL выглядит следующим образом:

     -- Add the parameters for the stored procedure here
    @laneSequence int = 0, 
    @rfidUniqueId nvarchar(50) = '',
    @planningLaneSeq nvarchar(10)= '',
    @sensorId nvarchar(50) = ''
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    IF NULLIF(@laneSequence, '') IS NULL select @laneSequence = 0
    if NULLIF(@rfidUniqueId, '') is null select @rfidUniqueId = 'null-recd'
    if NULLIF(@planningLaneSeq, '') is null select @planningLaneSeq = 'null-recd'
    if NULLIF(@sensorId, '') is null select @sensorId = 'null-recd'
    --else
    -- Insert statements for procedure here
    INSERT INTO [dbo].[TBL_SS_LaneTimings]
           ([laneSequence]
           ,[timestamp]
           ,[rfidUniqueId]
           ,[planningLaneSeq]
           ,[sensorId]) output inserted.ID
     VALUES
           (@laneSequence
           ,getdate()
           ,@rfidUniqueId
           ,@planningLaneSeq
           ,@sensorId)
END

 

Вот как я отправляю его (Python3):

 def setup_http_request(rfidUniqueId, mac_address, my_id_count):
    apiRequest = url   "?laneSequence="   str(my_id_count)   "amp;rfidUniqueId="   rfidUniqueId   "amp;planningLaneSeq="   str(my_id_count)   "amp;sensorId="   str(mac_address)
    send_http_request(apiRequest)

def send_http_request(apiRequest):
    try:
        auth = HttpNtlmAuth(db_user,db_password)
        response = requests.post(apiRequest,auth=auth) 


 

Я получаю код состояния ответа 200, но я не вижу значения, которое должно быть возвращено, и добавленные записи показывают, что все поля были получены как пустые.

Ответ №1:

В конце концов, это было решено, сначала открыв сеанс с sql server:

 session=requests()
session.auth = HttpNtlmAuth(db_user,db_password)
r=session.get(baseUrl)
 

Затем я изменил свой .пост на .get.

 response = session.get(apiRequest)
 

Теперь я возвращаю свое значение идентификатору новых записей И данным, правильно записанным в мою таблицу SQL.