#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.