fbpx

Вывод в словарь

260 просмотра
0
0 Комментариев

Всем привет! Обращался за помощью упростить выражение, после точного формулирования в своей голове, назрел конкретный вопрос или почте)

            import MySQLdb
            import MySQLdb.cursors
 
 
            sql_ip_1 = """SELECT;"""
            sql_ip_2 = """SELECT;"""
            sql_ip_3 = """SELECT;"""
 
 
            def ipdict():
                db = MySQLdb.connect(cursorclass=MySQLdb.cursors.DictCursor)
                cursor = db.cursor()
                cursor.execute('SET NAMES utf8;')
                cursor.execute(sql_ip_1.format('10.10.10.250'))
                for line in cursor.fetchall():
                    cursor.execute(sql_ip_2.format(line.get('id',None)))
                    for line2 in cursor.fetchall():
                        cursor.execute(sql_ip_3.format(line2.get('ip_group_id',None)))
                        for line3 in cursor.fetchall():
                            print line3,line
 
            ipdict()

Вывод результата.

В итоге получаю словари которые необходимо сложить в мести и если id одинаковые значения тогда ip объединить в один словарь
{‘ip’: ‘10.10.10.250’} {‘id’: 113L}
{‘ip’: ‘10.10.10.1’} {‘id’: 113L}

Должно получится: {‘ip’: ‘10.10.10.250,10.10.10.1’, ‘id’: 113L} все остальные данные убрал они находятся Вывод. Запросы итак тяжелые получаются, а их нужно еще собрать в нужный словарь и еще передать в json в веб. А может вообще и не быть словаря с IP, а просто необходимо id=113 собрать в один словарь.

Вообщем немного запутался с развязкой задачей(


Добавить комментарий

1 Ответы

Python Опубликовано 20.03.2019
0

Попробуйте так (может и не напутал, таблицы создавать лениво)

sql_ip = """SELECT  a.ip, us.id, us.basic_account, us.login, us.full_name, us.actual_address, ROUND(ac.balance,3) AS balance,
    ac.credit, ac.is_blocked, us.work_telephone, us.home_telephone, us.mobile_telephone, us.personal_manager
    FROM ip_groups AS ipg join iptraffic_service_links AS isl on isl.ip_group_id=ipg.ip_group_id
          join service_links AS sl on sl.id=isl.id
          join users AS us on us.id=sl.user_id
          join accounts AS ac us.basic_account=ac.id
          join (select group_concat(inet_ntoa(ipg1.ip & 0xFFFFFFFF)) ip, sl1.user_id
                from ip_groups ipg1 join service_links sl1 on ipg1.ip_group_id = sl1.ip_group_id
                     join iptraffic_service_links isl1 on isl1.id = sl1.id
                where sl1.deleted = 0 and isl1.deleted = 0 and ipg1.deleted =0
                group by sl1.user_id) a on us.id = a.user_id
    WHERE inet_ntoa(ipg.ip & 0xFFFFFFFF) LIKE '%%{0}%%' AND ipg.is_deleted=0
          AND isl.is_deleted=0
          AND sl.is_deleted=0
          AND us.is_deleted=0
          AND ac.is_deleted=0"""

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up