Задать вопрос
@kiiii
Молодойучупитон

Как проверить наличие значения в базе данных?

Есть таблица в бд, в которую заносятся user_id и username пользователя.
Как сделать так, чтобы данные пользователя записывались 1 раз?

id_proverka_bd = cur.execute("SELECT user_id FROM users where user_log = '%s'" %user_logg)
    if id_idd != id_proverka_bd:
      cur.execute("INSERT INTO users(user_id,user_log) VALUES (%s,%s)",(id_idd,user_logg))
      con.commit()

этот вариант не работает.
  • Вопрос задан
  • 1726 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
shabelski89
@shabelski89
engineer
При создании таблицы сделать поле user_id PRIMARY KEY.

with db.connect(db) as connection:
    cursor = connection.cursor()
    cursor.execute('''CREATE TABLE USERS (
                                                  user_id TEXT PRIMARY key,
                                                  username TEXT,
                                                  first_name TEXT,
                                                  last_name TEXT);'''


def add_user_info(user):
    with db.connect(db) as connection:
        cursor = connection.cursor()
        try:
            cursor.execute('''INSERT INTO USERS (user_id, username, first_name, last_name) 
            VALUES(?,?,?,?);''', user)
        except Error:
            pass
Ответ написан
Комментировать
@iddqda
network engineer, netdevops
if cur.fetchone() is None:

Но вообще можно сразу эту логику прописать в запросе
Гугли sql insert if not exist
Для разных рмдб рецепт может отличаться. К примеру в SQLite есть конструкция insert or ignore

З.Ы. Написал ответ, а потом только прочитал вопрос. Ну пусть будет. Хотя предыдущие ответы подходят лучше конечно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@anerev
Нужно таблицу переделать, оно так будет ошибку выдавать если запись уже в БД
CREATE TABLE users(
    user_id integer,
    user_log varchar(256),
    UNIQUE (user_id, user_log)
);

https://postgrespro.ru/docs/postgresql/9.5/ddl-con...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы