Когда я запускаю процедуру вручную, данные перемещаются:
Код: Выделить всё
exec [Construction].[uspProcess] 'Equipment',26
И затем у меня есть скрипт Python для выполнения той же процедуры . Он работает нормально, но данные не изменяются. Я не получаю никаких ошибок, просто передача данных не происходит.
config.py:
Код: Выделить всё
import os
def get_connection_string():
IS_MANAGED_IDENTITY = os.getenv("IS_MANAGED_IDENTITY", "True").lower() == "true"
if IS_MANAGED_IDENTITY:
connection_string = (
f"mssql+pyodbc://{DATABASE_NAME}?driver=ODBC+Driver+17+for+SQL+Server&Authentication=ActiveDirectoryMsi&autocommit=True"
)
else:
DATABASE_SERVER_NAME = os.getenv("DATABASE_SERVER_NAME")
DATABASE_NAME = os.getenv("DATABASE_NAME")
DATABASE_USER_NAME = os.getenv("DATABASE_USER_NAME")
DATABASE_USER_PASSWORD = os.getenv("DATABASE_USER_PASSWORD")
connection_string = (
f"mssql+pyodbc://{DATABASE_USER_NAME}:{DATABASE_USER_PASSWORD}@{DATABASE_SERVER_NAME}/{DATABASE_NAME}"
"?driver=ODBC+Driver+17+for+SQL+Server&autocommit=True"
)
return connection_string
< /code>
db.py:
def staging_to_target(table_name, batch_id):
session = session_factory() # Create a new session instance
try:
sql = text("EXEC SKUK_Lidat.uspProcessLidat @TableName = :table_name, @BatchId = :batch_id").execution_options(autocommit=True)
session.execute(sql, {"table_name": table_name, "batch_id": batch_id})
return True # No need to commit if autocommit is enabled
except Exception as e:
print(f"Error calling uspProcessLidat: {e}")
return False
finally:
session.close() # Ensure session closure
< /code>
Наконец -то я выполняю процедуру: < /p>
if staging_to_target(table_name, batch_id):
logging.info(f"uspProcessLidat executed successfully for table: {table_name}.")
else:
logging.error(f"uspProcessLidat execution failed for table: {table_name}.")
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... -or-data-s