Python 删除表格(如果存在)中的“标记”;未知表“;?[MySQL]

Python 删除表格(如果存在)中的“标记”;未知表“;?[MySQL],python,mysql,Python,Mysql,在我的python脚本中,当我尝试删除一个不存在的表时,使用删除。。。如果存在,我仍然会得到一个错误 import mysql.connector cnx = mysql.connector.connect(**my_database_config) cursor = cnx.cursor() cursor.execute("DROP TABLE IF EXISTS nonexistent_table;") 为什么会这样 mysql.connector.errors.DatabaseError

在我的python脚本中,当我尝试
删除一个不存在的表时,使用
删除。。。如果存在
,我仍然会得到一个错误

import mysql.connector
cnx = mysql.connector.connect(**my_database_config)
cursor = cnx.cursor()
cursor.execute("DROP TABLE IF EXISTS nonexistent_table;")
为什么会这样

mysql.connector.errors.DatabaseError: 1051: Unknown table 'mydb.nonexistent_table'

完整错误:

  File "myfile.py", line 199, in myfunction
    cursor.execute("DROP TABLE IF EXISTS nonexistent_table;")
  File "\venv\lib\site-packages\mysql\connector\cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "\venv\lib\site-packages\mysql\connector\cursor.py", line 470, in _handle_result
    self._handle_noresultset(result)
  File "\venv\lib\site-packages\mysql\connector\cursor.py", line 440, in _handle_noresultset
    self._warnings[0][1], self._warnings[0][2])
mysql.connector.errors.DatabaseError: 1051: Unknown table 'mydb.nonexistent_table'


在中,用户似乎得到了一个警告,而不是类似代码的错误。

该警告应该在那里,以便您处理不存在的情况下应该发生的事情。这不是一个错误。

警告应该在那里,让您处理如果它不存在应该发生的事情。这不是一个错误。

这似乎是一个与MySQL相关的问题。因此,您的SQL语句:

如果存在或不存在表格,则删除表格;
语法正确:

删除[临时]表[如果存在]
tbl_名称[,tbl_名称]
[限制|级联]
但你需要确定一些问题:

  • 您必须具有每个表的删除权限
  • 如果参数列表中命名的任何表不存在,则DROP TABLE行为取决于是否给定If EXISTS子句:
    • 如果没有IF EXISTS,该语句将失败,并出现一个错误,指示它无法删除哪些不存在的表,并且不会进行任何更改
    • 如果存在,则不存在的表不会发生错误。该语句删除所有确实存在的命名表,并为每个不存在的表生成注释诊断。这些注释可以显示为“显示警告”,“显示警告声明”

  • 最好检查与您的版本对应的MySQL文档。

    这似乎是一个与MySQL相关的问题。因此,您的SQL语句:

    如果存在或不存在表格,则删除表格;
    
    语法正确:

    删除[临时]表[如果存在]
    tbl_名称[,tbl_名称]
    [限制|级联]
    
    但你需要确定一些问题:

  • 您必须具有每个表的删除权限
  • 如果参数列表中命名的任何表不存在,则DROP TABLE行为取决于是否给定If EXISTS子句:
    • 如果没有IF EXISTS,该语句将失败,并出现一个错误,指示它无法删除哪些不存在的表,并且不会进行任何更改
    • 如果存在,则不存在的表不会发生错误。该语句删除所有确实存在的命名表,并为每个不存在的表生成注释诊断。这些注释可以显示为“显示警告”,“显示警告声明”

  • 最好检查与您的版本对应的MySQL文档。

    您说它在phpmyadmin中显示为警告。因此,您的客户端配置设置为将警告视为错误


    请参阅,然后禁用它,或者捕获错误并忽略它。

    您说它在phpmyadmin中显示为警告。因此,您的客户端配置设置为将警告视为错误


    请参阅,然后禁用它,或者捕获错误并忽略它。

    我认为“警告”并不代表“错误”。这只是一种提示。实际上,如果要创建“不存在的表”,则警告不会阻碍此过程。您的“不存在的_表”将在不停止的情况下创建。显然,“警告”让我们感到不安,尽管它并没有阻碍我们的进程,但我们仍然想让它消失。所以,你可以试着实现它

    import warnings
    warnings.filterwarnings('ignore')
    

    我认为“警告”并不代表“错误”。这只是一种提示。实际上,如果要创建“不存在的表”,则警告不会阻碍此过程。您的“不存在的_表”将在不停止的情况下创建。显然,“警告”让我们感到不安,尽管它并没有阻碍我们的进程,但我们仍然想让它消失。所以,你可以试着实现它

    import warnings
    warnings.filterwarnings('ignore')
    


    你确定这是错误而不是警告吗?警告是这样的,这能回答你的问题吗@艾哈迈德·尤斯,如果这不是一个风景。该表不存在,也从未创建过。@jared我认为这是一个错误,因为它是mysql.connector.errors.DatabaseError。但是,当我通过PHPMyAdmin执行相同的查询时,这是一个警告而不是一个错误。这可能会有所帮助:(基本上:存在将警告转换为错误的设置,因此主要是配置问题)。您确定这是一个错误而不是警告吗?警告是这样的,这能回答你的问题吗@艾哈迈德·尤斯,如果这不是一个风景。该表不存在,也从未创建过。@jared我认为这是一个错误,因为它是mysql.connector.errors.DatabaseError。但是,当我通过PHPMyAdmin执行相同的查询时,这是一个警告而不是一个错误。这可能会有所帮助:(基本上:存在将警告转换为错误的设置,因此主要是配置问题)。即使引发mysql.connector.errors.DatabaseError,它仍然是一个警告吗?您可以将其包装在try/catch块中以抑制错误消息?它应该在那里。即使引发mysql.connector.errors.DatabaseError,它仍然是一个警告吗?您可以将它包装在try/catch块中以抑制错误消息?我的问题是,对于一个不存在的表,我收到了一个关于IF EXISTS的错误。我确实有权限,可以毫无问题地删除现有表。@Pranab您的MySQL版本是什么?我使用的是MySQL版本5.7.25-Log。我的问题是,对于不存在的表,如果存在,我会收到一个错误。我确实有权限,可以毫无问题地删除现有表。@Pranab您的MySQL版本是什么?我使用的是MySQL版本5.7.25-logI,我没有使用这样的客户端;这是一个python脚本,我共享了我的python代码。您正在使用python连接器客户端。我怀疑在你的
    my_database\u config
    中设置raise_on_警告,我没有使用这样的客户端;这是一个python脚本,我共享了我的python代码。您正在使用python连接器客户端。我怀疑在您的
    my\u数据库配置中设置了raise\u on\u警告