首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLAlchemy / SQLSoup在MySQL中看不到临时表

SQLAlchemy / SQLSoup在MySQL中看不到临时表
EN

Stack Overflow用户
提问于 2015-09-18 12:10:36
回答 1查看 1K关注 0票数 4

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

有一个查询进行得非常慢,所以我重新修改了它。由于MySQL在嵌套子查询/派生表上的性能很差,我将其分成两个临时表并将它们连接起来。

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

代码语言:javascript
复制
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")

现在我得到了错误:

代码语言:javascript
复制
ProgrammingError: (ProgrammingError) (1146, "Table 'SAST.next_requests' (doesn't exist") 

我认为这是因为会话在查询之间被关闭和重新配置,或者类似的事情。

数据库连接如下所示。

代码语言:javascript
复制
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)

( SQLSOUP_DB是db.execute中使用的数据库)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-30 14:50:10

好吧,我得用会话。将SQL语句包装如下:

代码语言:javascript
复制
session = database.SESSION
with session.begin() : 
    database.execute("Create Temporary Table.....")
    database.execute("Create Temporary Table2.....")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32651740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档