21

我正在使用这个功能:

def checker(name,s)
        MY_T = "SELECT count(*) FROM `"+session.SessionInfo.Name where EventName='"+name+"'"

我想检查表是否存在,我该怎么做?我看到一些例子使用:XXXX.execute()这是什么意思?

这是我看到的:

query = cursor.execute("""SELECT count(*) FROM scan WHERE prefix = %s and code_id = %s and answer = %s and station_id = %s""",
                          (prefix, code_id, answer, station,))
        if query != 1:

例如,我尝试打印 MY_T 以查看它是否返回 -1 但它只是打印"select count (*)...... "

我怎样才能检查它?任何帮助将不胜感激。

4

5 回答 5

31

使用“TABLES”信息模式视图。 http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

SELECT * FROM information_schema.tables
WHERE table_name = 'YOUR TABLE'

您可以通过执行以下操作将此视图应用于您的代码:

def checkTableExists(dbcon, tablename):
    dbcur = dbcon.cursor()
    dbcur.execute("""
        SELECT COUNT(*)
        FROM information_schema.tables
        WHERE table_name = '{0}'
        """.format(tablename.replace('\'', '\'\'')))
    if dbcur.fetchone()[0] == 1:
        dbcur.close()
        return True

    dbcur.close()
    return False
于 2013-06-11T12:42:53.713 回答
21

如果您使用的是 Python-MySQL (MySQLdb) -> http://mysql-python.sourceforge.net/MySQLdb.html

cursor.execute() 是使用 MySQLdb,Python MySQL 驱动程序运行查询的方法。您可以传递两个参数,例如:

cursor.execute(statement, parameters)

并将执行“语句”解析“参数”到语句。您需要打开一个数据库连接并打开一个游标

我认为你可以使用 MySQL 的语句:SHOW TABLES LIKE 'tablename';

stmt = "SHOW TABLES LIKE 'tableName'"
cursor.execute(stmt)
result = cursor.fetchone()
if result:
    # there is a table named "tableName"
else:
    # there are no tables named "tableName"

编辑:会有其他具有类似行为的 Python 驱动程序。寻找你的:)

于 2013-06-11T13:07:29.213 回答
2

上面的答案可能不适用于 Oracle,我发现下面的代码片段适用于 Oracle:

import cx_Oracle
def checkTableExists(dbcon, tablename):
    dbcur = dbcon.cursor()
    try:
        dbcur.execute("SELECT * FROM {}".format(tablename))
        return True
    except cx_Oracle.DatabaseError as e:
        x = e.args[0]
        if x.code == 942: ## Only catch ORA-00942: table or view does not exist error
            return False
        else:
            raise e
    finally:
        dbcur.close()
于 2018-08-17T21:34:03.547 回答
1

我发现这适用于 Python 3.6 和 MySql 5.7:

table = 'myTable'
_SQL = """SHOW TABLES"""
cursor.execute(_SQL)
results = cursor.fetchall()

print('All existing tables:', results) # Returned as a list of tuples

results_list = [item[0] for item in results] # Conversion to list of str

if table in results_list:
    print(table, 'was found!')
else:
    print(table, 'was NOT found!')
于 2018-01-19T18:16:03.373 回答
0

我认为最直接的方法是使用:

SELECT COUNT(*) = 1 as exists FROM pg_tables WHERE tablename = 'my_table';

如果表存在则返回:

 exists 
--------
 t
(1 row)

或在 Python 中使用psycopg2

cur.execute(
    """
    SELECT COUNT(*) = 1 FROM pg_tables WHERE tablename = 'my_table';
    """
)
exists = cur.fetchone()[0]
print(exists)
True
if exists is False:
   # table does not exist
   ...
于 2021-11-23T12:04:29.727 回答