Так как это самый популярный вопрос в отношении этой проблемы, я снова опубликую здесь еще один ответ:
Похоже, что есть более простой способ сделать это (но только в MySQL):
select *
from (select * from mytable order by id, rev desc ) x
group by id
Пожалуйста, прокомментируйте ответ пользователя Bohemian в на этот вопрос за предоставление такого краткого и элегантного ответа на эту проблему.
EDIT: хотя это решение работает для многих людей, оно может быть нестабильным в долгосрочной перспективе, поскольку MySQL не гарантирует, что оператор GROUP BY вернет значимые значения для столбцов, не входящих в список GROUP BY. Поэтому используйте это решение на свой страх и риск
Вы получаете эту ошибку, если у вас есть вызов db.close()
, а затем попытайтесь получить доступ к базе данных без создания нового соединения. Попробуйте найти, если вы закрываете соединение с базой данных, когда вы этого не хотите.
Я могу подтвердить, что это вызвано глобальным курсором, который впоследствии используется в некоторых функциях. Мои симптомы были такими же: прерывистые ошибки интерфейса, которые будут временно очищены перезапуском 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.
Я согласился с Мобергом. Эта ошибка возникает, когда мы пытаемся получить доступ к базе данных после того, как мы закрыли соединение. Это может быть вызвано неправильным отступом в коде. Ниже мой код.
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 (), все работало хорошо. Подтверждено, что глобальная связь не является проблемой.