调用存储过程

虽然存储过程已经不再是推荐选项,但是很多时刻依旧会使用到,在SQLAlchemy中调用存储过程不是一件十分容易的事情,因为SQLAlchemy主要的目标是ORM,但存储过程返回的内容并不像数据表那样固定。所以在SQLAlchemy中调用存储过程更多的是使用原生数据库连接去完成。以下给出一个使用原生连接执行存储过程的示例。

connection = engine.raw_connection()
try:
	cursor = connection.cursor()
	cursor.callproc("my_procedure", ['x', 'y', 'z'])
	results = list(cursor.fetchall())
	cursor.close()
	connection.commit()
finally:
	connection.close()

注意,.callproc()方法调用存储过程时,不能使用OUTPUT返回数据。如果需要返回数据,需要使用原生SQL来调用存储过程,即使用db.session.execute()完成调用。

对于原生数据库功能DBAPI的使用,可以参考相关的Python文档。