2016-03-21 3 views
0

Я знаю, что «не работает» довольно расплывчато, но это то, что происходит с этим скриптом.Запрос Mysql, не работающий с скриптом python

У меня есть база данных с таблицей _added_points, которая выглядит следующим образом.

id g_id g_name      by_score by_rank by_percentage 
------ ---- --------------------------- -------- ------- ------------- 
    1 2332 john-doedd      307  408   (NULL) 
    2 3724 maxx        844  15   (NULL) 
    3 5208 orion-straxee-asset    663  122   (NULL) 
    4 8333 Proton       777  49   (NULL) 
    5 9029 contax-dgaaevel     155  542   (NULL) 
    6 6789 clanstrom-e      803  32   (NULL) 
    7 1250 rexx-bundle      666  119   (NULL) 
    8 0236 cluster-performance-toolkit  154  543   (NULL) 
    9 0334 gotas        493  263   (NULL) 
    10 3470 pleximoir       611  163   (NULL) 

Используя ниже, MySQL код, я пытаюсь дать percentage каждому пользователю купить вычисление by_score поля.

SET @total= (SELECT COUNT(*) FROM _added_points); 
SELECT s1.g_name, s1.g_id, FLOOR(nge/@total * 100) + 1 AS percent 
FROM _added_points s1 
JOIN (SELECT s1.id, COUNT(s2.id) AS nge 
    FROM _added_points s1 
    JOIN _added_points s2 
    ON s1.by_score <= s2.by_score 
    GROUP BY s1.id) AS s2 
ON s1.id = s2.id 
ORDER BY by_score DESC 

Проблема с выше сценарием, что это работает, когда я запускаю его с помощью построителя запроса, из Mysql Workbench или SQLyog .. но когда я запускаю его с питон скрипт, то я ничего не получаю. Что-то вроде этого:

[[email protected] crawler]# python _added_points.py 
() 

У меня есть более чем в два раза проверил, есть ли проблема с моим питона кодом, но нет ничего. Даже блок try: except не может поймать никаких исключений.

Есть ли код, который работает на клиентах mysql, но не при запуске, как на таких программах, как python или php? Это не кажется логичным, но это именно то, что происходит.

+0

Вы должны также разместить свой код на языке Python. – Selcuk

+0

@ Selcuk Я знал, что кто-то скажет, что нет ничего, кроме запроса mysql. который работает с другим запросом, но НЕ с этим. – ANW

+0

Может ли библиотека python mysql обрабатывать 2 запроса одновременно? – Mihai

ответ

1

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

cursor.execute('SET @total= (SELECT COUNT(*) FROM _added_points)') 
cursor.execute('''SELECT s1.g_name, s1.g_id, FLOOR(nge/@total * 100) + 1 AS percent 
FROM _added_points s1 
JOIN (SELECT s1.id, COUNT(s2.id) AS nge 
    FROM _added_points s1 
    JOIN _added_points s2 
    ON s1.by_score <= s2.by_score 
    GROUP BY s1.id) AS s2 
ON s1.id = s2.id 
ORDER BY by_score DESC''') 
+0

После нескольких часов попыток все это работало только для меня. Хотя это выглядит как большой взлом, у меня нет выбора, кроме как принять его. Благодаря!! – ANW

+0

Я думаю, что это должно быть сделано таким образом, чтобы пользовательская переменная присутствовала в сеансе. Это не такой большой взлом, хотя не все интерфейсы DB-API поддерживают выполнение нескольких SQL-запросов - например, sqlite3. – mhawke

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