首页 > 解决方案 > 对 SQLalchemy 结果的不合作的 For 循环进行故障排除

问题描述

在这里寻找第二双眼睛。我无法弄清楚为什么以下循环不会在第一次迭代之后继续。

'servicestocheck' sqlalchemy 查询在我的测试中返回 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)

这个函数是从脚本调用的,它是从另一个循环中调用的。我找不到嵌套循环的任何问题。

标签: pythonpython-3.xsqlalchemy

解决方案


最终成为 SqlAlchemy ORM 的问题(请参阅SqlAlchemy 在查询表对象时不返回所有行,但在我查询表对象列时返回所有行

我认为这个问题是由于我上面的一张表在现实生活中没有主键,添加一个假的也没有帮助。(我无权访问数据库来添加密钥)

而不是更进一步……我继续编写原始 SQL来推动我的项目。

这成功了:

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

    servicestocheck = oracleDB.execute(query)

推荐阅读