Это выглядит довольно стандартно SQL: просто параметризовать ваш запрос с именем пользователя,
c.execute("SELECT 1 FROM stuffToPlot where user = %s", [x])
, это вернет строку для каждого пользователя, соответствующего x
. Это может быть 0 или 1 строка (если у вас может быть несколько stuffToPlot
с одним и тем же user
, вы всегда можете добавить limit 1
к запросу). Затем вы можете проверить cr.rowcount
, чтобы увидеть, есть ли у вас результаты, даже не потрудившись их получить: вы просто хотите посмотреть, есть ли совпадение:
if c.rowcount:
print('Username already exists')
else:
print("Username doesn't exist")
В качестве альтернативы, вы можете использовать EXISTS
и извлеките одну строку, сообщающую, есть ли какая-либо подходящая строка, для этого и нужен оператор, и она, вероятно, будет более эффективной:
c.execute('select exists(select 1 from stuffToPlot where user = %s)', [x])
[exists] = cr.fetchone() # fetch and unpack the only row our query returns
if exists:
print('Username already exists')
else:
print("Username doesn't exist")
Существует множество проблем с вашим Python однако.
- SQL запросов всегда возвращают строк , что означает
fetchall
всегда список кортежей (даже если вы получаете одно значение), то есть вы никогда не находите там строку - , как указывает ее имя,
fetchall
извлекает всех строк, что означает, что вторая fetchall
всегда будет возвращать пустой список (ничего не осталось извлечь) if a: ... else: ...
намного лучше, чем if a: ... if not a: ...
- , как подсказано в моем предложении, как правило, лучше фильтровать ваши данные в базе данных (используя правильную параметризацию), чем извлекать всю совокупность база данных затем фильтруется нг в Python