Проверка, если пользователь уже проголосовал, возвращает истину, даже если нет? - PullRequest
0 голосов
/ 07 июля 2019

Пользователь вводит свой идентификатор пользователя и затем голосует «да» или «нет», но код возвращает значение «истина», и оператор if выполняется, даже если пользователь еще не проголосовал.

Например - выполнение идентификатора пользователя= 1 и голосование, ID пользователя = 1 и голосование.Во второй раз, когда userid пытается проголосовать, он говорит, что вы уже проголосовали, но если вы затем используете userid = 2 для третьей итерации, он говорит, что вы уже проголосовали, что не соответствует действительности.

import sqlite3

conn = sqlite3.connect(":memory:")
cur = conn.cursor()

with conn:
    cur.execute("CREATE TABLE users(votes, userid INTEGER)")

for i in range(3):
    userid = input("Enter your user id: ")
    votes = input("Vote yes or no: ")
    with conn:
        cur.execute("SELECT * FROM users WHERE votes = 'yes' OR 'no' AND userid = ?", (userid,))
        user_voted = cur.fetchall()

        if user_voted:
            print("You have already voted")

        else:
            cur.execute("INSERT into users(userid, votes) VALUES(?, ?)", (userid, votes))
            print(cur.fetchall())

with conn:
    cur.execute("SELECT * FROM users")
    print(cur.fetchall())

Нет сообщений об ошибках, просто выдает неправильный результат

1 Ответ

1 голос
/ 07 июля 2019

ГДЕ голосов = 'да' ИЛИ ​​'нет'

Если вы не хотите повторного упоминания столбца votes, тогда сформулируйте это как:

WHERE votes in ('yes', 'no')
...