场景
系统通过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