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


    场景

    系统通过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
    
  • 相关阅读:
    Odd sum CodeForces
    Chips CodeForces
    Secrets CodeForces
    Voting CodeForces
    Jury Meeting CodeForces
    Planning CodeForces
    Maxim Buys an Apartment CodeForces
    Chemistry in Berland CodeForces
    Monitor CodeForces
    Four Segments CodeForces
  • 原文地址:https://www.cnblogs.com/jiumo/p/11690308.html
Copyright © 2020-2023  润新知