Python 如何在sql表中只删除或编辑一行?
我使用python中的代码向本地数据库添加、删除、更新信息……它在添加信息方面运行良好,但当我使用update时,数据库中的所有信息或行都会变得相同。此外,当删除所有数据时,可能由于使用一个搜索栏来编辑或删除添加的数据而被删除 这是我的代码:Python 如何在sql表中只删除或编辑一行?,python,mysql,python-3.x,pycharm,mysql-workbench,Python,Mysql,Python 3.x,Pycharm,Mysql Workbench,我使用python中的代码向本地数据库添加、删除、更新信息……它在添加信息方面运行良好,但当我使用update时,数据库中的所有信息或行都会变得相同。此外,当删除所有数据时,可能由于使用一个搜索栏来编辑或删除添加的数据而被删除 这是我的代码: import sys import os import time from PyQt5 import QtCore, QtGui, QtWidgets, uic import mysql.connector from mysql.connector im
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()
我需要在这方面的帮助,因为我仍然是一个初学者,如果有人知道这个问题,请给我写正确的代码。由于我搜索了太多…最后一次谢谢你,当你更新时,你需要添加一个条件,否则表中的每一行都将用这些值更新 在代码中:
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))
如果要更新或删除单个行,则需要条件匹配主键或唯一键列。使用涉及任何其他类型列的条件将更新或删除与该条件匹配的所有行。(多亏了)在
UPDATE
查询中需要一个WHERE
子句来告诉它要更新哪些行。“在UPDATE
查询中需要一个WHERE
子句来告诉它要更新哪些行”@Barmar不要忘记主键或唯一键tho,因为topicstarter只想删除
或更新
一条记录,这只是一种特殊情况,他知道他要更新的行的ID。这可能是一个条件,就像同一个朋友的所有行一样。我必须在这个条件下写什么……请给我举个例子,如果没有与主键或唯一键列匹配的WHERE
子句,UPDATE
仍然可以更新多个记录。@RaymondNijland谢谢,我编辑了我的答案以反映您的评论。请给我一个该情况的示例,因为我没有understand@mthafize19在您的表中,应该有一个带有主键约束的整数列。该列用ID唯一标识每一行。如果要更新单行,则条件必须与主键
列中该行的ID匹配。例如:如果要更新ID为5的行,条件是其中ID=5
我在mysql workbench中将ID设置为自动增量,所以当我添加很多数据时,我必须返回到代码并写入其ID条件……这是怎么回事。。。。。一定还有别的办法@尔迪马约