2015-09-18 5 views
1

Я унаследовал приложение SQLQlchemy/SQLSoup и должен сделать его масштабированием 20 раз.SQLAlchemy/SQLSoup не видит временные таблицы в MySQL

Один запрос шел очень медленно, поэтому я его опровергла. Из-за низкой производительности 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") 

я предполагаю, что это потому, что сессия закрывается и вновь Oped между запросами, или что-то подобное.

Соединение с базой данных выглядит следующим образом.

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, используемый в db.execute).

Что нужно сделать, чтобы открыть сеанс, чтобы я мог использовать временные таблицы. Или это может быть что-то другое, вызывающее эту проблему?

+0

как насчет если мы ориентируемся на фактическом запросе и без каких-либо временных таблиц на всех – Drew

+0

Как насчет я провел последний день и половина делает это, и его хорошо известная проблема, что MySQL Безразлично «хорошо работать с вложенными подзапросами/производными таблицами, так как он не индексирует их. –

+0

он поместится выше здесь нажмите на это [править] – Drew

ответ

0

ОК, я должен использовать сеансы. Заверните операторы SQL, как так:

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

 Смежные вопросы

  • Нет связанных вопросов^_^