我正在使用python自动填充MySQL数据库。填充数据库的脚本(很长的/path/to/pythonScript.py
)实际上是由另一个python脚本(下面的示例)调用的,可以正常工作,并且我添加了一些语句来阻止我插入重复的条目。
当我尝试使用脚本/path/to/pythonScript.py
插入重复的条目时,得到了(如预期的那样)
ProgrammingError: 1061 (42000): Duplicate key name 'unique_index'
为了解决这个问题,我想在调用
try
脚本时编写except
/path/to/pythonScript.py
语句,如下所示:import mysql.connector
from mysql.connector.errors import ProgrammingError
# Here I have already successfully connected to the DB, and populated it
try:
get_ipython().system("ipython /path/to/pythonScript.py") # this is the script that populates the DB. It does not allow the insertion of duplicated entries
except ProgrammingError:
print("a warning message informing that I am trying to insert a duplicated entry")
当我第一次调用该脚本时,一切都进行得很好(毕竟,数据库是空的)。但是然后当我第二次调用脚本时(即,当我尝试插入重复的条目时),我仍然收到相同的错误
ProgrammingError: 1061 (42000): Duplicate key name 'unique_index'
我发现this documentation page上显示了如何处理错误的示例,尽管
ProgrammingError
上没有专门的示例。在此other documentation page中,ProgrammingError
上有一个示例,尽管他们跳过了imports部分,但恐怕我在import方面缺少了一些东西(请注意,当我调用from mysql.connector.errors import ProgrammingError
时,我不会出现任何错误)? 最佳答案
您将另一个脚本作为一个独立的进程运行。异常(exception)仅存在于当前进程中-FWIW,您可能正在运行Shell脚本或C编码的二进制应用程序,它是相同的。
我建议您暂时放弃IPython并花几天时间做完整的正式Python教程,并特别注意有关功能和模块的部分。然后,您可能需要重写第一个脚本,使其成为具有适当功能的适当模块(我从您的问题和示例代码中假设,当前它是一个包含顶层所有内容的纯脚本-但我当然错了;)) ,然后重写您的调用脚本以从第一个脚本中导入函数并对其进行调用。
还要注意,ProgrammingError
可能由于重复键以外的其他原因而发生,因此您必须检查异常的代码以找出发生了确切的错误。