我有一个Django管理命令来在我的数据库上创建物化视图,其运行如下(我将我的数据库登录详细信息存储在环境变量中):
python manage.py create_db_matviews $DB_NAME $DB_USER $DB_PASS
管理命令代码如下所示:
class Command(BaseCommand):
def handle(self, *args, **options):
db_name = args[0]
db_user = args[1]
db_pass = args[2]
self.conn = psycopg2.connect(database=db_name, user=db_user,
password=db_pass)
现在我想从我的测试中运行管理命令,以便在我的测试数据上创建物化视图。但是这不起作用:
def setUpModule():
# load fixtures, then...
management.call_command('create_db_matviews',
['test', 'test', 'test'], verbosity=0)
失败如下:
....
db_user = args[1]
IndexError: tuple index out of range
如何以管理脚本的方式提供参数?
另外,我应该使用哪些凭据来访问测试数据库?
答案 0 :(得分:1)
失败,因为在args的元组中你只设置了一个参数,其中包含3个值的列表。你应该使用:
management.call_command('create_db_matviews', 'test', 'test', 'test', verbosity=0)
*agrs
是pythons发送多个参数的方式,所有参数都将作为元组发送。您发送(['test', 'test', 'test', ],)
所以args[0]
是['test', 'test', 'test', ]
,而不是'test'