Python 如何使用sqlalchemy调用存储过程

Python 如何使用sqlalchemy调用存储过程,python,mysql,google-app-engine,sqlalchemy,Python,Mysql,Google App Engine,Sqlalchemy,如何使用sqlAlchemy调用MySQL的存储过程 我尝试了以下代码: import webapp2 from sqlalchemy import * from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import create_session from sqlalchemy import create_engine class TestSQL(webapp2.RequestHandler): def

如何使用sqlAlchemy调用MySQL的存储过程

我尝试了以下代码:

import webapp2

from sqlalchemy import *
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import create_session
from sqlalchemy import create_engine

class TestSQL(webapp2.RequestHandler):

def get(self):
    Base = automap_base()

    engine = create_engine(('mysql://root@127.0.0.1:3306/testDB?unix_socket=/cloudsql/School=:mysqlserver'))
    # reflect the tables
    Base.prepare(engine, reflect=True)

    metadata = MetaData(bind=engine)
    users = Table('Student', metadata, autoload=True)
    student = metadata.tables ["Student"]

    session = create_session()

    pro = session.execute("p_get_teacher_requests", (1,0))
    self.response.write(pro)
import webapp2

from sqlalchemy import *
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import create_session
from sqlalchemy import create_engine


class TestSQL(webapp2.RequestHandler):
    def get(self):
        self.response.headers["Content-Type"] = "application/json"

        Base = automap_base()

        engine = create_engine(('mysql://root@IP:3306/School?unix_socket=/cloudsql/school:mysqlserver'))

        # reflect the tables
        Base.prepare(engine, reflect=True)

        metadata = MetaData(bind=engine)

        users = Table('Student', metadata, autoload=True)
        student = metadata.tables ["Student"]

        session = create_session()

        connection = engine.raw_connection()
        cursor = connection.cursor()
        cursor.callproc("p_get_teacher_requests", [1,0])
        results = list(cursor.fetchall())
        cursor.close()
        connection.commit()

        self.response.write(results) 
下面是我得到的错误:

UnboundExecutionError: Could not locate a bind configured on SQL expression or this Session

经过一些研究和多次试验,它使用了以下代码:

import webapp2

from sqlalchemy import *
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import create_session
from sqlalchemy import create_engine

class TestSQL(webapp2.RequestHandler):

def get(self):
    Base = automap_base()

    engine = create_engine(('mysql://root@127.0.0.1:3306/testDB?unix_socket=/cloudsql/School=:mysqlserver'))
    # reflect the tables
    Base.prepare(engine, reflect=True)

    metadata = MetaData(bind=engine)
    users = Table('Student', metadata, autoload=True)
    student = metadata.tables ["Student"]

    session = create_session()

    pro = session.execute("p_get_teacher_requests", (1,0))
    self.response.write(pro)
import webapp2

from sqlalchemy import *
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import create_session
from sqlalchemy import create_engine


class TestSQL(webapp2.RequestHandler):
    def get(self):
        self.response.headers["Content-Type"] = "application/json"

        Base = automap_base()

        engine = create_engine(('mysql://root@IP:3306/School?unix_socket=/cloudsql/school:mysqlserver'))

        # reflect the tables
        Base.prepare(engine, reflect=True)

        metadata = MetaData(bind=engine)

        users = Table('Student', metadata, autoload=True)
        student = metadata.tables ["Student"]

        session = create_session()

        connection = engine.raw_connection()
        cursor = connection.cursor()
        cursor.callproc("p_get_teacher_requests", [1,0])
        results = list(cursor.fetchall())
        cursor.close()
        connection.commit()

        self.response.write(results) 

这是一个救命的答案!谢谢!伟大的cursor.callproc可以工作。session.execute、session.execute(func..)不适用于mysql。谢谢对于未来的读者,最好确保连接始终关闭,即使在引发异常的情况下也是如此。通过将代码包装在
try
语句中并使用
finally:connection.close()