#python #azure-sql-database #pyodbc
Вопрос:
Я пытаюсь выполнить хранимую процедуру с помощью pyodbc в ссылках данных, после выполнения SP я попытался зафиксировать соединение, но фиксации не происходит. Здесь я даю свой код, пожалуйста, помогите мне решить эту проблему.
import pyodbc
#### Connecting Azure SQL
def db_connection():
try:
username = "starsusername"
password = "password-db"
server = "server-name"
database_name = "db-name2"
port = "db-port"
conn=pyodbc.connect('Driver={ODBC Driver 17 for SQL server};SERVER=tcp:' server ',' port ';DATABASE=' database_name ';UID=' username ';PWD=' password)
cursor=conn.cursor()
return cursor, conn
except Exception as e:
print("Faild to Connect AZURE SQL: n" str(e))
cursor, conn = db_connection()
# conn1.autocommit=True
cursor.execute("delete from db.table_name")
cursor.execute("insert into db.table_name(BUSINESS_DATE) values('2021-10-02')")
cursor.execute("exec db.SP_NAME '20211023'")
conn.commit()
conn.close()
здесь я фиксирую соединение после освобождения SP. удаление и вставка вообще не происходит. и я попробовал с помощью cursor.execute(«УСТАНОВИТЬ NOCOUNT НА; имя_исполнителя db.SP ‘20211023’»), но это также не работает.
заранее спасибо
Ответ №1:
Если вы проверите этот документ на pyodbc, вы обнаружите, что —
Чтобы вызвать хранимую процедуру прямо сейчас, передайте вызов методу execute, используя либо формат, который распознает ваша база данных, либо формат escape-вызова ODBC. Затем драйвер ODBC переформатирует вызов для вас в соответствии с заданной базой данных.
Обратите внимание, что после настройки или завершения подключения попробуйте сделать это перед тем, как звонить в свой центр поддержки, и это поможет. conn.autocommit = True
По умолчанию это значение равно false.
-
Выполнение хранимой процедуры.
Вы сможете выполнить свою хранимую процедуру, если будете следовать приведенному ниже фрагменту кода.
cursor = conn.cursor() conn.autocommit = True executesp = """EXEC yourstoredprocedure """ cursor.execute(executesp) conn.commit()
-
Удалите записи в SQL Server
Вы можете удалить запись, как показано в приведенном ниже примере.
...#just an example cursor.execute(''' DELETE FROM product WHERE product_id in (5,6) ''') conn.commit()
Не забудьте добавить функцию conn.commit() в конце кода, чтобы гарантировать выполнение команды.
-
Вставить запись в SQL Server
Приведенный ниже фрагмент показывает, как мы можем сделать то же самое.
...#just an example cursor.execute("INSERT INTO EMP (EMPNO, ENAME, JOB, MGR) VALUES (535, 'Scott', 'Manager', 545)") conn.commit()
Я предлагаю вам прочитать следующий документ для получения дополнительной информации.
Комментарии:
1. вместо того, чтобы совершать три раза, я просто хочу совершить один раз (наконец), и когда я попытался выполнить сам SP, выполнение SP выполнено, и соединение закрыто в python, но оно все еще работает в бэкэнде SSMS. в целевых таблицах ничего не меняется (вставка, удаление..)
2. Да, вы можете сделать это также вместо того, чтобы совершать фиксацию на каждом шаге, которую вы можете совершить только один раз в конце.