Обновить запрос в Python с помощью словарного ключа. - PullRequest
1 голос
/ 09 апреля 2020

Я в первые дни обучения python, мое требование основано на столбце в Oracle Таблица im обновляет другой столбец, используя пару ключей словаря Значения. Мой словарь выглядит следующим образом

{'Соединенные Штаты': 'Американец', 'Франция': 'Европейский', 'Великобритания': 'Европейский'}

Поэтому, когда столбец Страна объединен Указывает, что столбец описания должен быть обновлен до американского, после моего подключения к базе данных вот мой код

query = "select country from details_table "
        cursor.execute(query)
        returnrows = cursor.fetchone()
        while returnrows is not None:
                pickedvalue=returnrows[0]

               mainvalue=file_dictionary[pickedvalue]


                updatequery = "update details_table set description='%s' where country='%s'"

                cursor.execute(updatequery %(mainvalue,pickedvalue))
                returnrows = cursor.fetchone()

Когда я выполняю это, я получаю сообщение об ошибке «Не запрос», поэтому я попытался изменить цитаты, которые я получаю по-другому Ошибка каждый раз

updatequery = "update details_table set description=%s where country=%s"
updatequery = "update details_table set description='%s' where country=%s"

для вышеупомянутых двух запросов я получил ORA-00933: SQL команда не была правильно завершена

updatequery = "update details_table set description=%s where country='%s'"

для этого я получил ORA-00904: "AMERICAN": неверный идентификатор

Может кто-нибудь сказать мне, какой будет правильный запрос для этого, я даже попытался, как показано ниже, без удачи

updatequery="update details_table set description={} where country='{}'"
sql=updatequery.format(main_value,pickedvalue)
cursor.execute(sql)

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Я не знаю, что такое волхвы c, он начал работать с этим, я не могу понять, в чем заключается лог c разницы между этим и вышеприведенным кодом, кто-то, пожалуйста, дайте мне знать

 query = "select country from details_table"
        cursor.execute(query)
        returnrows = cursor.fetchall()
        for rows in returnrows:
            for pickedvalue in rows:
                requiredvalue = file_dictionary[pickedvalue]

                print(requiredvalue)
                updatequery = "update details_table set description='%s' where country='%s'"
                cursor.execute(updatequery % (requiredvalue, pickedvalue))

        connection.commit()

0 голосов
/ 11 апреля 2020

Не пытайтесь использовать интерполяцию строк для обновления вашего запроса! Вместо этого, пожалуйста, используйте переменные связывания, как указано в документации .

Ваш пример будет выглядеть примерно так:

query = "select country from details_table"
cursor.execute(query)
returnrows = cursor.fetchall()
for rows in returnrows:
    for pickedvalue in rows:
        requiredvalue = file_dictionary[pickedvalue]

        print(requiredvalue)
        updatequery = "update details_table set description=:1 where country=:2"
        cursor.execute(updatequery, [requiredvalue, pickedvalue])

        connection.commit()

Другой способ сделать это с помощью итерации курсора и распаковка кортежа выглядит следующим образом:

query = "select country from details_table"
cursor.execute(query)
updateCursor = connection.cursor()
for country, in cursor:
    requiredvalue = file_dictionary[country]

    print(requiredvalue)
    updatequery = "update details_table set description=:1 where country=:2"
    updateCursor.execute(updatequery, [requiredvalue, pickedvalue])

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