Как проверить наличие дубликатов данных в Sqlite Python? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть этот код, который получает электронные письма из поля ввода в tkinter python и сохраняет их в базе данных, позже я планирую использовать эти данные для автоматической отправки электронных писем на все электронные письма в базе данных. Но единственная проблема заключается в том, что если я введу одно и то же электронное письмо дважды, оно сохранит их в базе данных без ошибок, и это приведет к отправке дубликатов информации на электронную почту. Так может кто-нибудь посоветовать, какой подход мне выбрать?

def submit():
# Creates the connection from the database.py
conn = sqlite3.connect("email.db")
c = conn.cursor()

# Insert into the database table
c.execute(
    "INSERT INTO email VALUES (:email_address)", {"email_address": user_email.get()}
)

conn.commit()
conn.close()

# Clear The Text Boxes
user_email.delete(0, END)

Так я могу получить информацию из базы данных, если она полезна

def emailGet():
# Creates the connection from the database.py
conn = sqlite3.connect("email.db")
c = conn.cursor()

c.execute("SELECT *, oid FROM email")
records = c.fetchall()
print("This is all the emails in the database : " + str(records))
global get_records
global new_record
get_records = ""

for i in records:
    get_records += str(i[0] + ",")
    #print(get_records)
    new_record = get_records[:-1]
    print(new_record)

conn.commit()
conn.close()

1 Ответ

1 голос
/ 02 марта 2020

Вы можете использовать оператор SELECT, чтобы проверить, находится ли электронное письмо, полученное вами от записи, в базе данных. Примерно так:

def checkEmailExistance():
    email_exists = False
    c.execute('SELECT * FROM email WHERE <email adresses column> = :email_adress'
    {"email_address": user_email.get()})

    # Previous line selects a row of your database only if the column that contains
    # the email adress in said row has the same adress as the one from the entry

    if c.fetchone() # which is the same as saying "if c.fetchone retrieved something in it"
        email_exists = True 
    else:
        email_exists = False
    return email_exists

Кроме того, вместо использования переменной email_exists вы можете просто вернуть True или False для сокращения кода, я написал это таким образом для удобства чтения.

Редактировать Это не имеет ничего общего с вашими вопросами, но при работе с базами данных я обнаружил, что крайне полезно добавлять столбец "value_id" в начале каждой таблицы, которая загружается и обновляется автоматически, вы никогда не знаете, когда вы ' это понадобится!

Надеюсь, это поможет

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