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