Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
Использую скрипт через транзакт, os.path.exists("")

Когда проверяю файл на сервере os.path.exists(R"D:\file1.txt")
но если файл в локальной сети os.path.exists(R"\\localPath\file1.txt")
скрипт выдает что файл не существует.

Если запустить такой же скрипт через IDE то находит оба файла.

Кто подскажет в чем может быть проблема?
8 фев 19, 19:41    [21804830]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28178
lex452
скрипт выдает что файл не существует.
А MS SQL Server к этому имеет отношение?
8 фев 19, 22:50    [21804961]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
Col
Member

Откуда: Торонто
Сообщений: 174
lex452,
У акаунт из-под которого SQL запушен доступ есть к сетевой шаре?

alexeyvg
2017-й через sp_execute_external_script SQL понимает Python.
Чтиво:
https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/quickstart-python-run-using-t-sql?view=sql-server-2017
8 фев 19, 23:03    [21804974]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
aleks222
Member

Откуда:
Сообщений: 541
lex452
Использую скрипт через транзакт, os.path.exists("")

Когда проверяю файл на сервере os.path.exists(R"D:\file1.txt")
но если файл в локальной сети os.path.exists(R"\\localPath\file1.txt")
скрипт выдает что файл не существует.

Если запустить такой же скрипт через IDE то находит оба файла.

Кто подскажет в чем может быть проблема?


Выполните их своего скрипта

whoami.exe

и поймете.
9 фев 19, 09:52    [21805086]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
Col
lex452,
У акаунт из-под которого SQL запушен доступ есть к сетевой шаре?

alexeyvg
2017-й через sp_execute_external_script SQL понимает Python.
Чтиво:
https://docs.microsoft.com/en-us/sql/advanced-analytics/tutorials/quickstart-python-run-using-t-sql?view=sql-server-2017

Да , имеет. Сервер запущен под пользователем у которогоесть доступ к папкам
9 фев 19, 10:25    [21805096]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
aleks222
lex452
Использую скрипт через транзакт, os.path.exists("")

Когда проверяю файл на сервере os.path.exists(R"D:\file1.txt")
но если файл в локальной сети os.path.exists(R"\\localPath\file1.txt")
скрипт выдает что файл не существует.

Если запустить такой же скрипт через IDE то находит оба файла.

Кто подскажет в чем может быть проблема?


Выполните их своего скрипта

whoami.exe

и поймете.

А как запустить ехе в скрипте?
9 фев 19, 10:26    [21805097]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
Вызвал внутри скрипта getpass.getuser() , выдало пользователя mssqlserver01. Хотя сам запрос выполнял не из под него, мало того я вообще не знаю что это за пользователь. Как запускать скрипт под нужным пользователем?
9 фев 19, 21:26    [21805432]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
vikkiv
Member

Откуда: London
Сообщений: 1906
lex452,

у меня в обоих скриптах (R и Python) на 2019м CTP2.2
(Java не проверял но по индукции предположу что тоже самое)

процессы запускаются от: nt service\mssqllaunchpad$my_sql_instance_name ,

специальная учётка для этого сервиса, т.е. автоматом пользователь не наследуется

(в смысле если данные передашь из самого SQL запроса, и потом получаешь обратно
- то они под контекстом начального пользователя пройдут без проблем как и полагается,
а дальше на стороне внешних скриптов - эта сервисная учётка изолированным процессом)
exec sp_execute_external_script @language=N'R',
@script=N'OutputDataSet<-data.frame(system("cmd.exe /c whoami",intern=T)[1])'
WITH RESULT SETS((x varchar(100)))
EXEC sp_execute_external_script
@language=N'Python',
@script=N'import os
import pandas as pd
OutputDataSet=pd.DataFrame([os.popen("whoami").read()])'
WITH RESULT SETS((x varchar(100)))
--exec xp_cmdshell 'whoami'
10 фев 19, 02:45    [21805513]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
vikkiv,

Спасибо за ответ, а есть возможность запускать скрипт от учетки пользователя, который его вызывает?
10 фев 19, 10:08    [21805562]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6142
lex452
vikkiv,

Спасибо за ответ, а есть возможность запускать скрипт от учетки пользователя, который его вызывает?

Нет. Есть группа SQLRUserGroup в ней пул пользователей под вызов launchpad. По дефолту 20( все и имя группы и количество вроде во время установки задаётся).
10 фев 19, 11:27    [21805582]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
TaPaK
lex452
vikkiv,

Спасибо за ответ, а есть возможность запускать скрипт от учетки пользователя, который его вызывает?

Нет. Есть группа SQLRUserGroup в ней пул пользователей под вызов launchpad. По дефолту 20( все и имя группы и количество вроде во время установки задаётся).

Кстати мне попадалось про SQLRusergroup, но на сервере у меня ее не находит
10 фев 19, 13:42    [21805637]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 28178
lex452
но на сервере у меня ее не находит
А у меня находит. А вы как ищете?
10 фев 19, 17:14    [21805740]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
vikkiv
Member

Откуда: London
Сообщений: 1906
alexeyvg,

Наверное реализация по пользователям от версии/редакции зависит 2016/2017/2019 {St/EE/Dev..}
например в 2017 St - ни у R ни у Python нет параллелизма
ну и на серверных хозяйствах у админов свои нормы,
так что там вообще по разному бывает
10 фев 19, 17:36    [21805747]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
vikkiv
Member

Откуда: London
Сообщений: 1906
lex452
vikkiv,

Спасибо за ответ, а есть возможность запускать скрипт от учетки пользователя, который его вызывает?
именно этот можно сказать и нет (хотя есть возможность которая по логике попадает в набор таблицы истинности)

в обход лучших практик можно реализовать, вариантов - зависит от фантазии,
от вызова какой-то своей собственноручно написанной Assembly
(C# например, которая собственно и запустит R/Python сервис под нужной учёткой)

до однопользовательского режима (если есть такая уверенность, иначе будут конфликты)
- там можно перед вызовом скрипта динамически учётку LaunchPad сервиса менять,

можно ещё передавать в Python пользователя отдельной переменной (они-же как In так и Out)
- и на той стороне уже запускать сетевые команды в контексте пользователя из этой переменной
(с вытаскиванием нужных Authentication Credentials из Security хранилища).

всё требует довольно серьёзных ограничений по разным причинам
- от конфликтов (clash) до вопросов безопасности
(в т.ч. кто может вызывать процедуру, или ограничить жесткой функцией с кучей проверок во избежание injections)

кратко - в SQL Server R/Python/Java добавили немного для других целей
(это у них в категории Advanced Analytics / Machine Learning Services)
а для ETL и файлообмена существуют другие инструменты..
в смысле IMHO: не надо изобретать велосипед,

в крайнем случае (опять-же безопасность) файлообмен можно кусками реализовать
- обработка/создание через Python, обмен другим инструментарием SQL Server (и производных)
т.е. разбить Python на этапы workflow..
10 фев 19, 17:55    [21805755]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
vikkiv,

Спасибо за развернутый ответ. Про другие способы я в курсе, хотел именно через питон попробовать, сравнить удобство. А в целом соглашусь что не для этих задач его внедрили
10 фев 19, 18:17    [21805766]     Ответить | Цитировать Сообщить модератору
 Re: Скрипт Python не находит файл в сети  [new]
lex452
Member

Откуда:
Сообщений: 534
alexeyvg
lex452
но на сервере у меня ее не находит
А у меня находит. А вы как ищете?

Пытался добавить пользователя на сервер, и в домене хотей найти его
10 фев 19, 18:56    [21805777]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить