如果语句未返回期望的结果

时间:2019-10-08 13:43:57

标签: mysql python-3.x for-loop if-statement mysql-connector

我是python的新手,我认为我的代码问题是由我是新手,并且有些理论或我尚不熟悉的东西引起的。

是的,这个问题之前曾被问过,但与我的不同。相信我,我尝试了我认为需要做的所有事情。

一切正常,直到我在“如果在五个筒仓中”语句中添加了所有内容。 在输入6个输入函数的值之后,该程序仅以退出代码0结束。 for循环未启动。

我希望代码在提示输入“五个”变量时接受103或106。

我正在使用PyCharm和Python 3.7。

如果有人可以帮助我,将不胜感激!谢谢!

import mysql.connector

try:
    db = mysql.connector.connect(
        host="",
        user="",
        passwd="",
        database=""
    )

    one = int(input("Number of requested telephone numbers: "))
    two = input("Enter the prefix (4 characters) with a leading 0: ")[:4]
    three = int(input("Enter the ccid: "))
    four = int(input("Enter the cid: "))
    six = input("Enter case number: ")
    five = int(input("Enter silo (103, 106 only): "))

    cursor = db.cursor()
    cursor.execute(f"SELECT * FROM n1 WHERE ddi LIKE '{two}%' AND silo = 1 AND ccid = 0 LIMIT {one}")
    cursor.fetchall()

    silos = (103, 106)

    if five in silos:
        if cursor.rowcount > 0:
            for row in cursor:
                seven = input(f"{row[1]} has been found on our system. Do you want to continue? Type either Y or N.")
                if seven == "Y":
                    cursor.execute(f"INSERT INTO n{five} (ddi, silo, ccid, campaign, assigned, allocated, "
                                   f"internal_notes, client_notes, agentid, carrier, alias) VALUES "
                                   f"('{row[1]}', 1, {three}, {four}, NOW(), NOW(), 'This is a test.', '', 0, "
                                   f"'{row[13]}', '') "
                                   f"ON DUPLICATE KEY UPDATE "
                                   f"silo = VALUES (silo), "
                                   f"ccid = VALUES (ccid), "
                                   f"campaign = VALUES (campaign);")
                    cursor.execute(f"UPDATE n1 SET silo = {five}, internal_notes = '{six}', allocated = NOW() WHERE "
                                   f"ddi = '{row[1]}'")
                else:
                    print("The operation has been canceled.")
            db.commit()
        else:
            print(f"No results for prefix {two}.")
    else:
        print("Enter either silo 103 or 106.")

        cursor.close()
        db.close()

except (ValueError, NameError):
    print("Please, enter an integer for all questions, except case number.")

2 个答案:

答案 0 :(得分:0)

因为它必须是:

for row in cursor.fetchall():
    // do something

在您的代码中cursor返回一个由db.cursor()定义的Python类,但是您需要调用fetchall()函数来读取其中包含的行。

您实际上是在不做任何事的情况下调用cursor.fetchall(),可以将调用分配给变量,然后执行以下操作:

result = cursor.fetchall()
for row in result:
   //do something

答案 1 :(得分:0)

我发现了问题:我不得不将cursor.fetchall()存储到一个变量中。 在我在“筒仓”元组之前输入“ eight = cursor.fetchall()”后,一切运行正常。