LINUX.ORG.RU

Python - Функция запроса к БД MySQL и возврат кортежа

 ,


0

1

Подскажите плиз, путаюсь на Python 3 реализовать функцию для нескольких запросов к БД (в моем случае 3 запроса по 3-м значениям) с помощью цикла for.

Всяко пробовал, возвращается в итоге только результат по первому значению (а111аа), хотя на самом деле должно быть 3. Подскажите пожалуйста, реально чтобы функция вернула кортеж, чтобы с ним впоследствии можно было работать, к примеру, просто отобразить его. За поправки и пример буду благодарен.

now_time =  datetime.today() #текущая дата без времени
delta = timedelta(days=7) # дельта в 7 дней
seven_time = now_time - delta # дата 7 дней назад
seven_time = seven_time.strftime("%Y-%m-%d") # форматируем 7-дневную дату
now_time = now_time.strftime("%Y-%m-%d")


def prob():
    spisok =('а111аа','т222тт','р333рр') #кортеж    
    conn = pymysql.connect(host='192.168.1.1', user='user', passwd='pass',db='base',charset='utf8')
    cur=conn.cursor()
    sql=("SELECT violations.family,violations.name,violations.gosnum FROM violations WHERE violations.gosnum LIKE %s AND violations.last_edit BETWEEN %s AND %s")

    for ter in spisok:
        cur.execute(sql,(ter,seven_time,now_time))
        result = cur.fetchall()

    return result    
    cur.close()
    conn.close()

alert = prob()
    for letter in alert:
    print(letter)           

cur.close()
conn.close()

Этот кусок не выполнится никогда т.к. он после return

Что нужно то? Как-то так?

results = []
for ter in spisok:
        cur.execute(sql,(ter,seven_time,now_time))
        results.append(cur.fetchall())
return results

Или можно всё в один список склеить

result = []
for ter in spisok:
        cur.execute(sql,(ter,seven_time,now_time))
        result.extend(cur.fetchall())
return result
pawnhearts ★★★★★ ()

Отступы поправил, и случайно удалил последнее сообщение:

data = [(ter,seven_time,now_time) for ter in spisok]
cur.executemany(sql, data)
result = cur.fetchall()


Не могу понять, можно весь блок целиком?
Заранее спасибо

Fess88 ()
Ответ на: комментарий от Fess88

Это не будет работать, executemany с select не работает, оно для insert`ов.

pawnhearts ★★★★★ ()

У тебя проблема в самом SQL-запросе. Напрягай БД на выборку результата, а не python.

sql=("SELECT violations.family,violations.name,violations.gosnum FROM violations WHERE violations.gosnum IN %s AND violations.last_edit BETWEEN %s AND %s")
cur.execute(sql,(spisok,seven_time,now_time))
result = cur.fetchall()
shrub ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.