组织函数以创建查询的更好方法可能是:
def checkTableExists(dbname, tablename):
query_args = {"table_name":tablename, "database_name":dbname}
exist_query = """
SELECT EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = '%(table_name)s'
AND TABLE_SCHEMA = '%(database_name)s') AS `Exist`
"""%(query_args)
# Do stuff with the `Exist` column of whatever your db connection returns.
# Should be 1 if True. Might be good to just return bool(...).
这就是EXISTS
目的,所以你不需要做一个“hack”并检查自己是否大于 0 COUNT
。INFORMATION_SCHEMA.TABLES
正如@jgranter 对 OP 的评论,如果您使用的是 MySQLdb,您可以点击该链接并让它进行参数替换。但是与 pyodbc 交互还有许多其他风格,因此字符串格式的查询永远不会消失(我希望它们会消失)。
更好
在 SQL 中编写一个存储过程,根据数据库名称和模式名称检查表是否存在,然后除了将参数传递给这个存储过程之外什么都不做。然后系统的任何组件(Python 或其他)都可以期望该存储过程的接口进行存在检查。
如果存在检查逻辑需要更改(例如,在您的应用程序中,表有超过 0 行而不是仅仅使用CREATE TABLE
命令创建,反之亦然),那么您可以更改存储过程的内部结构无需前往每个具有嵌入式字符串 SQL 查询的下游位置并更改逻辑。它有助于为系统与数据库的交互添加模块化和封装性。