我发现调用 MySQL 存储过程并在 python 中存储结果的大多数示例都使用callproc带有 a 的方法cursor,但该callproc方法不存在于scoped_session使用 sqlalchemy 创建的对象上。我使用 a 是scoped_session因为我正在构建一个 Flask 应用程序,它将在应用程序的不同部分使用会话(作用域会话适用于简单的选择语句)。存储过程进行一项选择并返回数据。我正在使用 mysql.connector 作为 mysql 驱动程序。
我在烧瓶路线中尝试了以下方法,但出现错误:
mysql_engine = create_engine(conn_string)
DbSession = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=mysql_engine))
@app.route('/')
def index():
# register session
DbSession()
sql = 'call myStoredProc(:param);'
# call stored procedure: getting error "Use multi=True when executing multiple statements"
result = DbSession.execute(sql, {'param': 'param value'})
data = [dict(r) for r in result]
# remove session from register
DbSession.remove()
# pass data to template to render
return render_template('index.html', data = data)
如代码所示,我收到此错误:“执行多个语句时使用 multi=True。” 我了解到 mysq.connector 假设存储过程有一个 out 参数,因此默认情况下认为它是多语句,即使存储过程只是运行单个选择查询。execute的方法不DbSession接受选项。
错误中的建议是使用cmd_query_iter多个语句,但这在 DbSession 对象上也不存在。
关于如何执行此操作有什么建议吗?
慕后森
相关分类