數據庫中是否存在某張表的檢查


場景

系統通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM