Как удалить или изменить только одну строку в таблице SQL?

0

это мое приложение, и я использовал кнопку поиска, чтобы легко редактировать информацию. Я использовал этот код в python для добавления, удаления, обновления информации в локальную базу данных... Он хорошо работает при добавлении информации, но когда я использую обновление всей информации или строк в базе данных становятся одинаковыми. Кроме того, при удалении всех удаленных данных возможно из-за использования одной панели поиска для добавления или удаления добавленных данных

Это мой код:

import sys
import os
import time

from PyQt5 import QtCore, QtGui, QtWidgets, uic
import mysql.connector
from mysql.connector import errorcode

FORM_CLASS, _ = uic.loadUiType(os.path.join(os.path.dirname(__file__),"mahmoudtarek.ui"))

class Main(QtWidgets.QMainWindow, FORM_CLASS):
    def __init__(self,parent=None):
        super(Main,self).__init__(parent)
        self.setupUi(self)
        self.InitUI()
        self.conn = None

        self.handle_buttons()
        self.handle_db_connections()

    def InitUI(self):
        ## changes in the run time
        pass

    def handle_buttons(self):
          ## all buttons in the app
        self.pushButton.clicked.connect(self.add_mahmoud_friends)
        self.pushButton_3.clicked.connect(self.update_mahmoud_friends)
        self.pushButton_2.clicked.connect(self.delete_mahmoud_friends)
        self.pushButton_6.clicked.connect(self.search_mahmoud_friends)


    def handle_db_connections(self):
        try:
            self.conn = mysql.connector.connect(
                host='127.0.0.1',
                database='mydb',
                user='root',
                password='134668691011',
                use_pure=True)  # use_pure is set to true

            if self.conn.is_connected():
                db_Info = self.conn.get_server_info()
                print("Connected to MySQL database using C extension... MySQL Server version on ", db_Info)
        except mysql.connector.Error as err:
            print("Error while connecting to MySQL using C extension", err)

    def add_mahmoud_friends(self):
        mth_friends = self.lineEdit.text()
        mth_search = self.lineEdit_4.text()
        if self.conn:
            c = self.conn.cursor()
            try:
                c.execute('''INSERT INTO ahmed (mth_friends,mth_search) values (%s,%s)''', (mth_friends,mth_search))
                self.conn.commit()
                self.lineEdit.setText('')
                self.lineEdit_4.setText('')
                self.statusBar.showMessage('ok mahmoud')


            except mysql.connector.Error as err:
                print("Error: ", err)

    def update_mahmoud_friends(self):
        mth_friends = self.lineEdit.text()
        mth_search = self.lineEdit_4.text()
        if self.conn:
            c = self.conn.cursor()
            try:
                c.execute('''UPDATE ahmed SET mth_friends = %s,mth_search = %s''', (mth_friends, mth_search))
                self.conn.commit()
                self.lineEdit.setText('')
                self.lineEdit_4.setText('')
                self.statusBar.showMessage('ok mahmoud')
                self.lineEdit_3.setText('')


            except mysql.connector.Error as err:
                print("Error: ", err)

    def delete_mahmoud_friends(self):
        c = self.conn.cursor()
        sql = '''DELETE FROM ahmed WHERE mth_search = %s'''
        mth_search = self.lineEdit_3.text()
        c.execute(sql, [(mth_search)])
        self.conn.commit()
        self.statusBar.showMessage("ok")
        self.lineEdit.setText('')
        self.lineEdit_4.setText('')
        self.lineEdit_3.setText('')


    def search_mahmoud_friends(self):
        if self.conn:
            c = self.conn.cursor()

            try:

                sql = '''SELECT * FROM ahmed WHERE mth_search = %s'''
                mth_search = self.lineEdit_3.text()
                c.execute(sql, [(mth_search)])
                data = c.fetchall()
                for row in data :
                    print(row)
                    self.lineEdit.setText(str(row[1]))
                    self.lineEdit_4.setText(str(row[2]))

            except mysql.connector.Error as err:
              print("Error: ", err)

    def closeEvent(self, event):
        if self.conn:
            self.conn.close()
        super(Main, self).closeEvent(event)


def main():
    app= QtWidgets.QApplication(sys.argv)
    window =Main()
    window.show()
    app.exec_()

if __name__ == '__main__':
    main()

Мне нужна помощь в этом, поскольку я все еще новичок. Если кто-то знал проблему, напишите мне исправленный код. Поскольку я искал слишком много... и последнее спасибо

  • 0
    Вам необходимо предложение WHERE в запросах UPDATE которое сообщает, какие строки нужно обновить.
  • 0
    «Вам нужно предложение WHERE в запросах UPDATE котором указывается, какие строки обновлять» @Barmar Не забывайте первичные или уникальные ключи, но только тем, кто запускает тему, хочет DELETE или UPDATE одну запись
Показать ещё 2 комментария
Теги:
python-3.x
mysql-workbench
pycharm

1 ответ

1

Когда вы UPDATE, вам нужно добавить условие, иначе каждая строка в таблице будет обновляться с этими значениями.

В вашем коде:

c.execute('''UPDATE ahmed SET mth_friends = %s,mth_search = %s''', (mth_friends, mth_search))

Должно иметь условие, например:

c.execute('''UPDATE ahmed SET mth_friends = %s,mth_search = %s WHERE {ADD CONDITION HERE}''', (mth_friends, mth_search))

Если вы хотите обновить или удалить одну строку, вы хотите, чтобы условие соответствовало первичному ключу или уникальному столбцу ключа. Использование условия, связанного с любым другим типом столбца, будет обновлять или удалять все строки, соответствующие этому условию. (Спасибо Раймонд Нидланд)

  • 1
    Без WHERE , соответствующего столбцам первичного или уникального ключа, UPDATE все еще может обновить несколько записей.
  • 0
    @RaymondNijland Спасибо, я отредактировал свой ответ, чтобы отразить ваш комментарий.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню