代码之家  ›  专栏  ›  技术社区  ›  wobbily_col

SQLAlchemy/SQLGroup在MySQL中看不到临时表

  •  4
  • wobbily_col  · 技术社区  · 10 年前

    我继承了一个SQLQlchemy/SQLGroup应用程序,需要将其扩展20倍。

    有一个查询速度很慢,所以我重新检索了它。由于MySQL在嵌套子查询/派生表上的性能较差,我将其拆分为两个临时表并将它们连接起来。

    现在我正在尝试将SQL添加到代码中,但当我尝试访问临时表时,我收到一个错误,表示该表不存在。

    db.execute("""DROP TABLE IF  EXISTS next_requests""") ;
    db.execute("""
            CREATE TEMPORARY TABLE next_requests
                    (INDEX request_id_index (cirId)) 
            SELECT DISTINCT 
                cr.uuid             AS cirId,
                ....")
    
    db.execute("SELECT * FROM next_requests")
    

    现在我得到了错误:

    ProgrammingError: (ProgrammingError) (1146, "Table 'SAST.next_requests' (doesn't exist") 
    

    我认为这是因为会话正在关闭并在查询之间重新操作,或者类似的情况。

    数据库连接如下。

    ENGINE = create_engine(settings.dbString, pool_recycle=1800, pool_size=5)
    SESSION = scoped_session(sessionmaker(autoflush=True,\
        expire_on_commit=False, autocommit=True))
    SQLSOUP_DB = sqlsoup.SQLSoup(ENGINE, session=SESSION)
    

    (SQLOUP_DB是DB.execute中使用的数据库)。

    我需要做什么才能保持会话打开,以便我仍然可以使用临时表。或者可能是其他原因导致了这个问题?

    1 回复  |  直到 10 年前
        1
  •  4
  •   wobbily_col    10 年前

    好的,我必须使用会话。这样包装SQL语句:

    session = database.SESSION
    with session.begin() : 
        database.execute("Create Temporary Table.....")
        database.execute("Create Temporary Table2.....")