Я пытаюсь представить SQL-соединение в приложении фляги, используя SQLAlchemy как db.session - PullRequest
0 голосов
/ 31 октября 2018
apInfo = db.engine.execute(
    "select L.circuit_id, L.remote_id, AP_I.vlan, AP_I.color \
     from leases as L, ap_info as AP_I \
     where L.circuit_id = AP_I.mac_address and \
           L.remote_id = '%s'; " % sm_mac_.remote_id[:17]).fetchone()

Это генерирует правильно: (u'0a: 00: 3e: bb: 76: 54 ', u'0a: 00: 3e: bb: c1: f7', 12, 77))

Моя попытка представления в виде:

apInfo = db.session.query(LEASES, AP_INFO) \
    .filter(LEASES.circuit_id == AP_INFO.mac_address)\
    .filter(LEASES.remote_id == sm_mac_.remote_id[:17])\
    .all ()

Создает список, содержащий кортеж ?; [(<<strong> main .LEASES объект в 0x101f039d0>, <<strong> main .AP_INFO объект в 0x101f0e410>)]

Попытка определить, как изменить db.session или извлечь данные из того, что было создано.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Похоже, вы можете использовать .one() вместо .all():

apInfo = db.session.query(LEASES, AP_INFO) \
    .filter(LEASES.circuit_id == AP_INFO.mac_address)\
    .filter(LEASES.remote_id == sm_mac_.remote_id[:17])\
    .one()

Ваш первый пример с использованием Engine возвращает ResultProxy, который затем используется для вызова ResultProxy.fetchone().

Однако во втором примере с использованием db.Session используется Query.all(), который всегда возвращает результаты, заключенные в список:

all()

    Return the results represented by this Query as a list.

Если вы знаете, что ожидаете только одного результата, используйте Query.one() или Query.one_or_none.

В качестве альтернативы, если ваш запрос может вернуть несколько результатов, но вы хотите получить только первое, есть Query.first()

0 голосов
/ 31 октября 2018

Это работает, но не сделано!

ret = db.session.query(LEASES, AP_INFO) \
             .filter(LEASES.circuit_id == AP_INFO.mac_address)\
             .filter(LEASES.remote_id == sm_mac_.remote_id[:17])\
             .all ()

apInfo = (ret[0].LEASES.circuit_id, \
   ret[0].LEASES.remote_id, \
   ret[0].AP_INFO.vlan, \
   ret[0].AP_INFO.color)

Я бы хотел найти способ прямого возврата значений из запроса; улучшить запрос.

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