Как красиво распечатать вывод для SqlAlChemy? - PullRequest
1 голос
/ 06 марта 2020

Это мой код для SqlAlChemy после привязки его к базе данных. Я пытаюсь напечатать верхний IP-адрес за 2017 год. Однако я не смог распечатать свои результаты.

from sqlalchemy import select, func, and_, desc
import math

Top2017 = session.query(Log.IP,func.count(Log.IP).label('count')).filter(and_(Log.date >= '2017-1-1',Log.date <= '2017-12-31')).group_by(Log.IP).order_by(desc('count'))

print("The Top IP Address is   ")
print("Year" , "IP Address")
for q in Top2017.limit(3):
    print("2017", q)

Мой вывод:

The Top IP Address is   
Year IP Address
2020-03-06 10:21:03,811 INFO sqlalchemy.engine.base.Engine SELECT logfile."IP" AS "logfile_IP", count(logfile."IP") AS count 
FROM logfile 
WHERE logfile.date >= ? AND logfile.date <= ? GROUP BY logfile."IP" ORDER BY count DESC
 LIMIT ? OFFSET ?
2020-03-06 10:21:03,812 INFO sqlalchemy.engine.base.Engine ('2017-1-1', '2017-12-31', 3, 0)
2017 ('10.131.0.1', 1921)
2017 ('10.130.2.1', 1805)
2017 ('10.128.2.1', 1667)

Вывод очень грязный, так как результат не очень ясен со всеми напечатанными запросами. Следовательно, мой желаемый результат будет:

The Top IP Address is 

Year IP Address Count 
2017 10.131.0.1 1921
2017 10.130.2.1 1805
2017 10.128.2.1 1667

Спасибо за вашу помощь.

Это вывод для dict.

The Top IP Address is   
Year IP Address Count
OrderedDict([('10.131.0.1', 1921), ('10.130.2.1', 1805), ('10.128.2.1', 1667)])

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете сделать это так:

from collections import OrderedDict

Top2017 = (
    session.query(Log.IP, func.count(Log.IP).label("count"))
    .filter(and_(Log.date >= "2017-1-1", Log.date <= "2017-12-31"))
    .group_by(Log.IP)
    .order_by(desc("count"))
    .limit(3)
)

dict = OrderedDict(Top2017)

Теперь у вас есть результат запроса в словаре и вы можете напечатать желаемый вывод из него следующим образом:

print("The Top IP Address is   ")
print("Year" , "IP Address", "Count")
for key, value in dict.items():
    print("2017", key, value)

Do let Я знаю, если вам нужно больше объяснений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...