Вставить значение в базу данных MySQL, если оно не существует, используя Python (PyMySQL)

#python #mysql #database #phpmyadmin #pymysql

#python #mysql #База данных #phpmyadmin #pymysql

Вопрос:

Я пытаюсь извлечь значение из существующей базы данных, а также вставить значение в базу данных, если оно не существует.

Этот код отлично работает для извлечения значения из значения, но я не могу вставить значение в базу данных.

     import pymysql
    connection = pymysql.connect(
    host='localhost',
    user='root',
    password='',
    db='chatbotqad',
    )
    user_input=input('Enter :')
    print(user_input)
    try:
    with connection.cursor() as cursor:
    sql = "SELECT * FROM `qans` WHERE `Questions` = ('%s') " % user_input
    try:
        cursor.execute(sql)
        result = cursor.fetchall()

        if not cursor.fetchone():
            sqli = "INSERT INTO `qans` VALUES (%s)" % user_input
            cursor.execute(sqli) 

        print("Quett Answer")            
        print("-------------------------")            
        for row in result:
            print(str(row[0])   "tt"   row[1])


    except:
        print("Oops! Something wrong")
    connection.commit()
    finally:
    connection.close()**strong text**
 

Комментарии:

1.Этот код подвержен условиям гонки, в идеале вы также должны добавить уникальный ключ в свою таблицу, а также вы должны сделать это в одном запросе более или менее похожим INSERT INTO <table> <columns> SELECT <columns> FROM <table> WHERE <condition> .. Смотрите руководство MySQL по использованию INSERT INTO .. SELECT ... синтаксиса

2. Можете ли вы увидеть, выполняется ли оператор insert — например, поместите print() оператор перед cursor.execute(sqli)

Ответ №1:

Я наконец нашел это решение.

 import pymysql

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='',
    db='chatbotqad',
)

user_input=input('Enter input:')

try:
    with connection.cursor() as cursor:
        sql = "SELECT * FROM `qans` WHERE `Questions` = ('%s') " % user_input

        try:
            if (cursor.execute(sql)==0):
                result = cursor.fetchall()

                Ans_input=input('Please enter Answer:-')
                sql = "INSERT INTO `qans` (Questions, Answers) VALUES (%s,%s)"

                try:
                    cursor.execute(sql, (user_input,Ans_input))
                    print("Task added successfully")
                except:
                    print("Oops! Something wrong")

            else:
                cursor.execute(sql)
                result = cursor.fetchall()
                print("Quett Answer")
                print("-------------------------")
                for row in result:
                     print(str(row[0])   "tt"   row[1])
        except:
            print("Oops! Something wrong")

    connection.commit()
finally:
    connection.close()