Ошибка интерфейса при выполнении запроса pymsql [дубликат]

Так как это самый популярный вопрос в отношении этой проблемы, я снова опубликую здесь еще один ответ:

Похоже, что есть более простой способ сделать это (но только в MySQL):

select *
from (select * from mytable order by id, rev desc ) x
group by id

Пожалуйста, прокомментируйте ответ пользователя Bohemian в на этот вопрос за предоставление такого краткого и элегантного ответа на эту проблему.

EDIT: хотя это решение работает для многих людей, оно может быть нестабильным в долгосрочной перспективе, поскольку MySQL не гарантирует, что оператор GROUP BY вернет значимые значения для столбцов, не входящих в список GROUP BY. Поэтому используйте это решение на свой страх и риск

36
задан Marian 11 July 2011 в 14:38
поделиться

4 ответа

45
ответ дан scum 5 September 2018 в 08:16
поделиться

Вы получаете эту ошибку, если у вас есть вызов db.close(), а затем попытайтесь получить доступ к базе данных без создания нового соединения. Попробуйте найти, если вы закрываете соединение с базой данных, когда вы этого не хотите.

28
ответ дан Moberg 5 September 2018 в 08:16
поделиться

Я могу подтвердить, что это вызвано глобальным курсором, который впоследствии используется в некоторых функциях. Мои симптомы были такими же: прерывистые ошибки интерфейса, которые будут временно очищены перезапуском apache.

from django.db import connection
cursor = connection.cursor() # BAD

def foo():
    cursor.execute('select * from bar')

Но я использую Django поверх Oracle 11.2, поэтому я не считаю, что это ошибка в драйвере MySQL / python. Вероятно, это связано с кэшированием, выполняемым apache / mod_wsgi.

2
ответ дан Patrick 5 September 2018 в 08:16
поделиться

Я согласился с Мобергом. Эта ошибка возникает, когда мы пытаемся получить доступ к базе данных после того, как мы закрыли соединение. Это может быть вызвано неправильным отступом в коде. Ниже мой код.

conn = connect()
cur = conn.cursor()
tk = get_tickers(cur)
for t in tk:
    prices = read_price(t, cur)
    if prices != None:
        update_price(t, cur)
        print 'Price after update of ticker ', t, ':'
        p_open, p_high, p_low, p_close = read_price(t, cur)
        print p_open, p_high, p_low, p_close
    else:
        print 'Price for ', t, ' is not available'
    conn.close()

Я получил ту же ошибку, о которой сообщил Мариан. После того, как dedenting conn.close (), все работало хорошо. Подтверждено, что глобальная связь не является проблемой.

2
ответ дан Toàn Nguyễn 5 September 2018 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: