python - 如何检查表是否存在?

时间:2013-06-11 12:35:47

标签: python sql

我正在使用此功能:

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 个答案:

答案 0 :(得分:12)

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

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

cursor.execute(statement, parameters)

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

我认为你可以使用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驱动程序。寻找你的:)

答案 1 :(得分:9)

使用“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

答案 2 :(得分:0)

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

[alias]
deletedone = "!f() { git fetch -p &&git branch -vv|grep ': gone]'|awk '{print $1}'|xargs git branch -D;}"

答案 3 :(得分:0)

以上答案可能不适用于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()