Евгений Степанищев

Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

Зависание _mysql (mysqldb)

Мучался-мучался, на выборке висит модуль _mysql (это биндинг mysqldb к MySQL у Python). Совершенно случайно заметил, что нигде не указываю кодировку, указал — виснуть перестало.

Судя по strace, модуль чего-то ждёт из сокета, ощущение такое, что просто неверно подсчитывается длина контента — если не указать кодировку, данных ожидается больше, чем приходит. Мда.

Добавлено чуть позже: да что ж такое! Опять висит. И с указанием кодировки — тоже. В интернете ничего нет, что же я не так делаю?

Через _mysql — висит, через MySQLdb — тоже, через execute — висит, через курсор — тоже. Что ж это такое-то?

Добавлено ещё позже: вот весь код:
import MySQLdb as mysql

db = mysql.connect(\
    host = 'localhost',
    user = 'log',
    passwd = 'xxx',
    db = 'log',
    use_unicode = True,
    charset='utf8'
)

c  = db.cursor()
c.execute("SELECT * FROM wp_4_posts")
Вот так уже висит. Не знаю что с этим делать, пойду домой.
16 марта 2010 22:01

LXj (lxj.endofinternet.net)
16 марта 2010, 22:54

А ты тут раньше pymysql упоминал. Почему пользуешься именно mysql-python, а не им?

bolk (bolknote.ru)
16 марта 2010, 23:02, ответ предназначен LXj (lxj.endofinternet.net):

Я его попробовал поставить. Не смог подключиться ничем, кроме рута. Когда сменил пароль рута, то и рутом не смог. Ошибка авторизации пишет (ошибка №1043).

LXj (lxj.endofinternet.net)
16 марта 2010, 23:37

А сколько строк в wp_4_posts и какой курсор используется?

LXj (lxj.endofinternet.net)
16 марта 2010, 23:38

*какие курсоры пробовал, очевидно

LXj (lxj.endofinternet.net)
16 марта 2010, 23:50

Ну и, видимо, глупый вопрос -- другими способами (скажем, в консольном mysql-клиенте) запрос выполняется без проблем?

bolk (bolknote.ru)
17 марта 2010, 00:34, ответ предназначен LXj (lxj.endofinternet.net):

А сколько строк в wp_4_posts
Строк — дофига, не считал
какие курсоры пробовал
только дефолтный
другими способами (скажем, в консольном mysql-клиенте) запрос выполняется без проблем?
увы, да, консольный клиент выдаёт без проблем

LXj (lxj.endofinternet.net)
17 марта 2010, 17:25

Если строк дофига, то может быть стоит попробовать use_result вместо store_result? Ну или попробовать для начала считать не все строки, а по сотне

bolk (bolknote.ru)
18 марта 2010, 16:01, ответ предназначен LXj (lxj.endofinternet.net):

Ох, оказалось, что после перезагрузки всё нормализировалось. Я как-то не ожидал такого.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)

Подсказка по написанию комментария

В комментариях можно применять следующую специальную разметку:

  • слово, обрамлённое в «звёздочки» выделяется *жирным*
  • ссылка становится ссылкой: http://bolknote.ru
  • ссылка в скобках также становится ссылкой, закрывающая скобка не захватывается: (http://bolknote.ru)
  • каждую строку цитаты следует начинать со знака «больше»:
    > это цитата
    > из двух строк
  • можно вставить картинку, залитую на один из сервисов: «Яндекс.Фотки», «Фликр» или «Пикплз». Для этого нужно вставить на страницу полный адрес вашей картинки на сервисе, он превратится в картинку:

    http://fotki.yandex.ru/users/bolknote/view/274311?page=3