2015-11-25 16 views
0

Я продолжаю сталкиваться с ошибкой «psycopg2.ProgrammingError: column« none »не существует».psycopg2.ProgrammingError: столбец «none» не существует. Заявление об обновлении

Я прочитал psycopg2 documentation и посмотрел на других постах на этой ошибке, однако, многие из них специфические для вставки запроса вместо запроса обновления.

Моего кода выглядит следующим образом: -

def send_to_sql(identity,list1,list2,list3): 
    userid = 30 
    Fixture_No = None 
    Home_Side_Score = None 
    Away_Side_Score = None 
    conn = psycopg2.connect("dbname='Euro2016' user='postgres' host='localhost' password='##passwordhere##'") 
    cur = conn.cursor() 
    cur.execute("""UPDATE "Predictions" SET userid = %r, "Fixture_No" = %r, "Home_Side_Score" = %r, "Away_Side_Score" = %r WHERE "Predictions"."userid" = %r AND "Predictions"."Fixture_No" = %r """ % (userid, Fixture_No, Home_Side_Score, Away_Side_Score, userid, Fixture_No)) 
    conn.commit() 
    cur.close() 
    conn.close() 

Этот код работает отлично, если оценки и арматура число, которое я пытаюсь передать это номер, но когда запись None сделана, код падает на его лицо. Кто-нибудь сохранит меня ...

+0

оффтоп намек: использовать подготовленные заявления http://initd.org/ psycopg/articles/2012/10/01/подготовленные-заявления-psycopg/там гораздо безопаснее, чем они создают sql с внешними переменными – kwarunek

ответ

1

Использование %s не %r. Для того, чтобы проверить, что отправляется на использование сервера cursor. mogrify:

update = """ 
    UPDATE "Predictions" 
    SET 
     userid = %s, 
     "Fixture_No" = %s, 
     "Home_Side_Score" = %s, 
     "Away_Side_Score" = %s 
    WHERE 
     "Predictions"."userid" = %s AND 
     "Predictions"."Fixture_No" = %s 
""" 
data = (userid, Fixture_No, Home_Side_Score, Away_Side_Score, userid, Fixture_No) 
print cur.mogrify(update, data) 
cur.execute(update, data) 

Еще лучше, использовать словарь, чтобы передать данные:

update = """ 
    UPDATE "Predictions" 
    SET 
     userid = %(userid)s, 
     "Fixture_No" = %(Fixture_no)s, 
     "Home_Side_Score" = %(Home_Side_Score)s, 
     "Away_Side_Score" = %(Away_Side_Score)s 
    WHERE 
     "Predictions"."userid" = %(userid)s AND 
     "Predictions"."Fixture_No" = %(Fixture_No)s 
""" 
data = dict (
    userid = userid, 
    Fixture_No = Fixture_No, 
    Home_Side_Score = Home_Side_Score, 
    Away_Side_Score = Away_Side_Score 
) 
+0

Фантастическая помощь, это сделал трюк. Просто использовал «обновление», где вы написали «запрос», и он выполнил эту работу. Благодаря! – LemusThelroy

+0

Из интереса, почему эта ошибка не возникает? Я использовал некоторый отдельный код в другом месте, используя% s, и я все равно получаю ту же ошибку. Я мог бы вообще понять, почему возникает такой тип ошибки. – LemusThelroy

+0

@LemusThelroy Являются ли целевые столбцы нулевыми? –

Смежные вопросы