Как запустить код Python напрямую с правильным синтаксисом в студии управления сервером сиквел 2017 - PullRequest
0 голосов
/ 13 мая 2019

Я написал скрипт на python, который получает данные из sql через «import pyodbc». Данные, которые извлекает этот скрипт, анализируются в API шлюза текстовых сообщений для соответствующей отправки текстовых сообщений клиентам. Это хорошо работает в Python.

Однако теперь я хочу написать хранимую процедуру sql, которая будет запускаться каждый раз, когда в моем бизнесе генерируется новый счет-фактура, и отправлять данные для номера телефона + сообщение этому скрипту python python в рамках той же хранимой процедуры sql.

Проблема, с которой я сейчас сталкиваюсь, - это написание этого скрипта на python с помощью ssms 2017 и выполнение его без синтаксической ошибки. Учитывая, что я использую sql 2017, я включил python и r соответственно.

execute sp_execute_external_script
@language = N'Python',
@script =  N'

import africastalking

username = "sandbox"
apikey = "bf62be6"
africastalking.initialize(username, apikey)
sms = africastalking.SMS
recipients = ["+254797301255"]
message = ["Test from SQL"]
sender = "MegaLtd"

try:
    response = sms.send(message, recipients, sender)
    print(response)
except Exception as e:
    print(f"Houston, we have a problem {e}")

'

Это ошибка, которую я получаю

Msg 39004, Level 16, State 20, Line 2
A 'Python' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.
Msg 39019, Level 16, State 2, Line 2
An external script error occurred: 

Error in execution.  Check the output for more information.
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "C:\PROGRA~1\MICROS~3\MSSQL1~1.MPR\MSSQL\EXTENS~1\MPRYCESQLSEVER01\1D611E8A-CDE1-4F30-9FAC-0BB13871A3DE\sqlindb.py", line 59
    print(f"Houston, we have a problem {e}")
                                          ^
SyntaxError: invalid syntax

SqlSatelliteCall error: Error in execution.  Check the output for more information.
STDOUT message(s) from external script: 
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
  File "C:\Program Files\Microsoft SQL Server\MSSQL14.MPRYCESQLSEVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 406, in rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "C:\Program Files\Microsoft SQL Server\MSSQL14.MPRYCESQLSEVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 291, in rx_native_call
    ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.

1 Ответ

0 голосов
/ 13 мая 2019

В вашей среде, скорее всего, используется Python 3.5.2

https://docs.microsoft.com/en-us/sql/advanced-analytics/r/use-sqlbindr-exe-to-upgrade-an-instance-of-sql-server?view=sql-server-2017

Однако f-строки были введены в Python 3.6

Так что вам либо придется каким-то образомобновить ваш Python или просто переписать обработку исключений, например, так:

# ORIG: print(f"Houston, we have a problem {e}")
print("Houston, we have a problem {}".format(e))

Если вы не уверены, какую версию Python использует ваша среда, вы можете проверить с помощью

import sys
print(sys.version)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...