提问人:Taimoor Pasha 提问时间:10/29/2022 更新时间:10/29/2022 访问量:142
除非在 Python MySQL 中满足条件,否则运行 sql 查询
Run sql query unless condition fulfil in Python MySQL
问:
我有一个 cron 作业,它返回唯一 id,我将在 sql 查询中使用它,它返回具有该 id 的记录数,
假设 id = 78,表是 'Student',
现在我正在运行查询: ,query = select count(*) from students where id = 78
它会返回我 1,然后我会删除该记录,现在下次,它将是不同的 id.. 我想一次又一次地运行循环,直到它返回我 0 个计数。
现在我正在运行以下逻辑,但它不起作用:
def check_delete_link_between_student_account(self, student_id: int):
count_query = None
while count_query == 0:
query = (f"DELETE FROM student "
f"WHERE student_id={student_id};")
self.db_client.run_query(query)
count_query = (f"SELECT COUNT(*) FROM {self.student} "
f"WHERE student_id={student_id};")
self.db_client.run_query(count_query)
但它没有运行,我遇到了问题。
答:
0赞
Barmar
10/29/2022
#1
你不应该把循环放在函数中,因为它不会改变。您应该使用不同的学生 ID 在循环中调用该函数。该函数应返回计数。student_id
您需要在删除行之前获取计数,否则计数将始终为 .0
def check_delete_link_between_student_account(self, student_id: int):
self.db_client.cursor.execute(f"""
SELECT COUNT(*) FROM {self.student}
WHERE student_id = ?""", (student_id,))
student_count = self.db_client.cursor.fetchone()[0]
self.db_client.cursor.execute(f"
DELETE FROM {self.student}
WHERE student_id = ?""", (student_id,))
return student_count
我已将查询更改为使用带有占位符的预准备语句。我不得不弥补从您的数据库连接中获取光标 - 您似乎没有使用众所周知的 ORM,所以我不知道实际代码应该是什么。并且可能需要更改为取决于您使用的数据库。self.db_client.cursor
?
%s
评论
0赞
Taimoor Pasha
10/29/2022
student_id是从cron job获取的id,这就是我提到的问题。
0赞
Barmar
10/29/2022
但是你说它应该在每次循环中改变,循环应该重复,直到计数为 0。它在你的问题中没有改变。
评论
count_query == 0
count_query = None
student_id
while count_query != 0:
count_query
SELECT COUNT(*)