Устранение неполадок при отказе Для L oop результатов SQLalchemy - PullRequest
0 голосов
/ 02 марта 2020

Ищу второй набор глаз здесь. Я не могу понять, почему следующий l oop не будет продолжен после первой итерации.

Запрос sqlalchemy 'servicestocheck' возвращает 45 строк в моем тесте, но я не могу перебрать результаты, как я ожидал ... и никаких ошибок не возвращается. Вся функциональность работает на первой итерации.

У кого-нибудь есть идеи?

def serviceAssociation(current_contact_id,perm_contact_id):


    servicestocheck = oracleDB.query(PORTAL_CONTACT).filter(
    PORTAL_CONTACT.contact_id == current_contact_id 
    ).order_by(PORTAL_CONTACT.serviceID).count()

    print(servicestocheck)  # returns 45 items

    servicestocheck = oracleDB.query(PORTAL_CONTACT).filter(
    PORTAL_CONTACT.contact_id = current_contact_id
    ).order_by(PORTAL_CONTACT.serviceID).all()


    for svc in servicestocheck:



    #
        # Check to see if already exists
        #

        check_existing_association = mysqlDB.query( 
        CONTACTTOSERVICE).filter(CONTACTTOSERVICE.contact_id ==
        perm_contact_id,CONTACTTOSERVICE.serviceID ==
        svc.serviceID).first()

        # 
        # If no existing association
        #

        if check_existing_association is None:


            print ("Prepare Association")

            assoc_contact_id = perm_contact_id
            assoc_serviceID = svc.serviceID
            assoc_role_billing = False
            assoc_role_technical = False
            assoc_role_commercial = False


            if svc.contact_type == 'Billing':
                assoc_role_billing = True
            if svc.contact_type == 'Technical':
                assoc_role_technical = True
            if svc.contact_type == 'Commercial':
                assoc_role_commercial = True

            try:
                newAssociation = CONTACTTOSERVICE(
                assoc_contact_id, assoc_serviceID,
                assoc_role_billing,assoc_role_technical,
                assoc_role_commercial)

                mysqlDB.add(newAssociation)
                mysqlDB.commit()
                mysqlDB.flush()

            except Exception as e:

                print(e)

Эта функция вызывается из скрипта и вызывается из другого l oop. Я не могу найти никаких проблем с вложенными циклами.

1 Ответ

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

В результате возникла проблема с SQLAlchemy ORM (см. SqlAlchemy не возвращает все строки при запросе объекта таблицы, но возвращает все строки при запросе столбца объекта таблицы )

Я думаю, что проблема Это связано с тем, что одна из моих таблиц выше не имеет первичного ключа в реальной жизни, и добавление поддельного ключа не помогло. (У меня нет доступа к БД для добавления ключа)

Вместо того, чтобы бороться с этим дальше ... Я пошел дальше и написал raw SQL, чтобы продвинуть свой проект.

Это помогло:

    query = 'SELECT * FROM PORTAL_CONTACT WHERE contact_id = ' + str(current_contact_id) + 'ORDER BY contact_id ASC'

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