python - 存储过程未使用 sqlalchemy/pyodbc 提交

标签 python sql-server sqlalchemy pyodbc

我正在使用 sqlalchemy/pyodbc 连接到 MS SQL 2012 服务器。我选择 sqlalchemy 是因为它使用 .read_sql.to_sql 与 pandas 数据帧直接集成。

概括来说,我的代码是:

df = dataframe.read_sql("EXEC sp_getsomedata")
<do some stuff here>
finaldf.to_sql("loader_table", engine,...)

这部分效果很好,非常容易阅读等。问题是我必须运行最终存储过程才能将加载器表中的数据插入到事件表中。通常,sqlalchemy 知道在 INSERT/UPDATE/DELETE 之后提交,但不想在我运行这个最终存储过程时为我进行提交。

尝试多种方法后,我看到数据库中的事务未提交。我知道 sqlalchemy 非常灵活,我使用了大约 3% 的功能,让它工作的最简单方法是什么?我认为我需要使用 sqlalchemy core 而不是 ORM。我看到了使用 sessionmaker 的示例,但我认为它垄断了引擎对象并且不允许 pandas 访问它。

connection = engine.connect()
transaction = connection.begin()
connection.execute("EXEC sp_doLoaderStuff")
transaction.commit()
connection.close()

我尝试从连接级别、游标级别调用 .execute,甚至使用 .raw_connection() 方法,但没有成功。

connection = engine.raw_connection()
connection.autocommit = True
cursor = connection.cursor()
cursor.execute("EXEC sp_doLoaderStuff")
connection.commit()
connection.close()

我在这里缺少什么想法吗?

最佳答案

完全是自作自受。使用 raw_connection() 方法且工作正常的正确工作代码是:

connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("EXEC sp_doLoaderStuff")
connection.commit()
connection.close()

关于python - 存储过程未使用 sqlalchemy/pyodbc 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32120933/

相关文章:

mysql - SQL选择计算

c# - 在 SqlException 上自动重试请求

python - SQLAlchemy:如何对列值执行 regexp_replace

python - Flask + SQLAlchemy 结果转为 JSON

python - 从 NLP 中的名词相提取名词

sql-server - 在 SQL Server 上插入许多记录之前禁用索引是一个好习惯吗?

python - 使用间隔屏蔽 numpy 数组

sqlalchemy - 高效搜索 Flask-SQLAlchemy 数据库

python - 使用特定编译器参数编译 Cython

python - 通过在 Python 3.7 中按段落计算单词来自定义数据结构