Выполнение хранимой процедуры через Python не изменяет данные, но через SSM или Data Studio работаетPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Выполнение хранимой процедуры через Python не изменяет данные, но через SSM или Data Studio работает

Сообщение Anonymous »

У меня есть хранимая процедура в базе данных Azure sql, которая перемещает данные из промежуточной таблицы в целевую таблицу.
Когда я запускаю процедуру вручную, данные перемещаются:

Код: Выделить всё

exec [Construction].[uspProcess] 'Equipment',26
Итак, эта процедура перемещает данные для таблицы Equipment из таблицы ConstructionStaging.Equipment в таблицу Construction.Equipment.
И затем у меня есть скрипт 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»