Если заявление не возвращает желаемый результат - PullRequest
1 голос
/ 08 октября 2019

Я новичок в 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 голосов
/ 08 октября 2019

Я обнаружил проблему: мне пришлось хранить cursor.fetchall () в переменной. После того, как перед кортежом «silos» я поставил: eight = cursor.fetchall (), все работало отлично.

0 голосов
/ 08 октября 2019

Потому что это должно быть:

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

В вашем коде cursor возвращает класс Python, определенный как db.cursor(), но вам нужно вызвать функцию fetchall(), чтобы прочитать содержащиеся в ней строки.

Вы на самом деле звоните cursor.fetchall(), ничего не делая с этим, вы можете назначить вызов переменной и затем сделать это:

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