параметрами хранимой процедуры, которые передаются в Python код:
CREATE PROCEDURE SSCC_PALET_HIERARCHY
@SSCC as VARCHAR(MAX)
AS
BEGIN
exec sp_execute_external_script
@language = N'Python',
@script=N'
import requests
import json
import os
import time
import pandas as pd
from pandas.io.json import json_normalize
file_token = open("C:\Python\MDLP\Auth\\api_token.txt")
token = file_token.read()
file_token.close()
URL = "http://10.40.11.25:48080/api/v1/reestr/sscc/+' + @SSCC + '/hierarchy"
headers = {"Authorization": "token"+" "+str(token), "Content-type": "application/json"}
answer = requests.get(URL, headers = headers, verify=False)
test = json.loads(answer.text)
df = pd.json_normalize(test,"down")
Как передать @SSCC в URL без ошибок?
Стараемся изо всех сил избегать питона внутри БД.
почему?
мб это шутка про то, что все юзают пайтон для бд
Как вообще БД ведёт себя когда у тебя есть тупить начинает и твой requests.get подвисает?
Python для БД одно, меня интересует Python внутри БД
https://docs.microsoft.com/en-us/sql/machine-learning/tutorials/quickstart-python-functions?view=sql-server-ver15 наверное как-то так , @params = N' @pythonparam str' , @pythonparam = @SSCC
Абсолютно нормально, просто исключение пишешь и все Это больше для аналитики и построения отчета ведь
О, спасибо, посмотрю не нагуглил ничего толкового
Ну смотри конечно, ок.
Погоди, какое "исключение"?
ну если ты получил на get или post, какую либо ошибку, выводишь эту ошибку и все, у тебя inserta или любой другой процедуры ведь нет, чтобы порушить базу
Мне прям больно смотреть на этот код. Слжши не экранированы, проверка сертификатов отключена, реквестс юзается без пула соединений (считай каждый запрос дольше), код ответа не проверяется, зачем-то контент тайп без тела, и нао6в ответе руками жсон парсится.
Ошибку похуй. Что будет когда функция повиснет из-за сети на 10 секунд?
До всего выше перечисленного я пока не дошел, замечания учту
Ничего, перезапуск соединения будет на стороне сервиса построения отчета
Какого соединения? Что с самой СУБД произойдет в этот момент?
Ничего, ошибку выдаст
какую?
"превышено количество доступных коннектов"
Зачем экранировать слеши, если все работает и так? Проверка сертификатов отключена, по причине подмены сертификатов на уровне домена, иначе SSL HANDSHAKE и используется stunnel для обхода проверки, поэтому не чистый url. Контент тайп с телом, application/json. А чем плох парсинга жсон руками, там ведь далее он преобразуется в датафрейм? На счет юзания реквестс с пулом соединения, посмотрю, не использовал.
работчает чудом
Обсуждают сегодня