Nano Hash - криптовалюты, майнинг, программирование

pyodbc autocommit не работает с sybase и sqlalchemy

Я подключаюсь к базе данных sybase ASE 15 из Python 3.4 с помощью pyodbc и выполняю хранимую процедуру.

Все работает, как ожидалось, если я использую собственный pyodbc:

import pd
import pyodbc

con = pyodbc.connect('DSN=dsn_name;UID=username;PWD=password', autocommit=True)
df = pd.read_sql("exec p_procecure @GroupName='GROUP'", con)

[Драйвер - Adaptive Server Enterprise].

У меня должно быть autocommit = True, и если я этого не сделаю, я получаю следующую ошибку:

DatabaseError: сбой выполнения для sql 'exec ....': ('ZZZZZ', "[ZZZZZ] [SAP] [Драйвер ODBC ASE] [Adaptive Server Enterprise] Хранимая процедура 'p_procedure' может выполняться только в режиме несвязанных транзакций. Команда 'SET CHAINED OFF' заставит текущий сеанс использовать режим несвязанных транзакций. \ N (7713) (SQLExecDirectW) ")

Я пытаюсь добиться того же, используя SQLAlchemy (1.0.9):

from sqlalchemy import create_engine, engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql import text

url = r'sybase+pyodbc://username:password@dsn'
engine = create_engine(url, echo=True)
sess = sessionmaker(bind=engine).Session()

df = pd.read_sql(text("exec p_procedure @GroupName='GROUP'"),conn.execution_options(autocommit=True))

Сообщение об ошибке остается тем же, несмотря на то, что я указал autocommit = True для подключения. (Я также тестировал это на уровне сеанса, но в этом нет необходимости и нет никакой разницы).

DBAPIError: (pyodbc.Error) ('ZZZZZ', «[ZZZZZ] [SAP] [Драйвер ODBC ASE] [Adaptive Server Enterprise] ....

Вы видите здесь что-то не так?

Как всегда, мы будем благодарны за любую помощь.


Ответы:


1

Передача аргумента autocommit = True в качестве элемента в словаре аргументов connect_args действительно работает:

connect_args = {'autocommit': True}
create_engine(url, connect_args=connect_args)

connect_args - словарь параметров, которые будут переданы непосредственно в метод DBAPI connect () в качестве дополнительных аргументов ключевого слова.

15.11.2015

2

У меня возникли проблемы с опцией autocommit. Единственное, что у меня сработало, - это изменить этот параметр на Истинно после установления соединения.

ConnString = 'Driver=%SQL_DRIVER%;Server=%SQL_SERVER%;Uid=%SQL_LOGIN%;Pwd=%SQL_PASSWORD%;'

SQL_CONNECTION = pyodbc.connect(ConnString)
SQL_CONNECTION.autocommit = True
24.05.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..