数据库中是否存在某张表的检查

时间:2019-10-17
本文章向大家介绍数据库中是否存在某张表的检查,主要包括数据库中是否存在某张表的检查使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

场景

系统通过admin给表app添加或者删除模块名称来选择是否给用户启用/禁用APP模块。因此,在根urls中做路由分发的时候,需要取app表中的数据。

数据库为:PostGreSQL

[
    urlpatterns.append(
        url(r'^%s/' % app, include(
            '%s.urls' % app, app_name=app,
            namespace=app))) for app in App.objects.filter(
        status=App.INSTALLED).values_list("appname", flat=True)
    if app != "multeam" and app != "personl" and app != "rbteam" and app != "vul"
]

那么在第一次部署的时候,做数据库迁移命令的时候,因为数据库中不存在任何表,而此处代码做了表查询,所以会抛出异常。

解决方案:

  • 在执行本段代码的时候,我们可以去检查下收据库中存不存在这张表,如果存在就让他继续执行,否则就跳过执行。
from project import settings
import psycopg2

def db_app():
    """
    检测数据库中是否存在基础数据表
    :return: True or False
    """
    DATABASES = settings.DATABASES['default']
    conn = psycopg2.connect("dbname={NAME} user={USER} host={HOST} password={PASSWORD} port={PORT}".format(
        NAME=DATABASES['NAME'],
        USER=DATABASES['USER'],
        HOST=DATABASES['HOST'],
        PASSWORD=DATABASES['PASSWORD'],
        PORT=str(DATABASES['PORT'])))
    cur = conn.cursor()
    cur.execute("select exists(select * from information_schema.tables where table_name=%s)", ('base_app',))
    return cur.fetchone()[0]  # True / False

原文地址:https://www.cnblogs.com/jiumo/p/11690308.html