Python代码在REPL中工作,但在作为模块导入/执行时不能

时间:2015-05-18 08:09:31

标签: python postgresql sqlalchemy

所以我有一个模块,它是我的Flask Web应用程序的一部分,包含数据库连接。这很简单。

from sqlalchemy import create_engine, MetaData
import os
from sqlalchemy.schema import Table, Column

host = os.environ.get("DATABASE_PORT_5432_TCP_ADDR") or "localhost"
port = os.environ.get("DATABASE_PORT_5432_TCP_PORT") or "5432"
url = host + ":" + port

engine = create_engine('postgresql+pg8000://postgres:password@%s/empathy' % url) 
_meta = MetaData(bind=engine)
_meta.reflect(views=True, schema="biomart")

如果我运行python并将这些命令复制到REPL中,则执行正常,我可以运行_meta.tables来获取数据库中的表列表。

但是,如果我在REPL中运行python database.py或只是import database,则会导致错误:'communication error', error(111, 'Connection refused')

当代码在模块中时如何拒绝连接,但是当它在REPL中运行时它是否正常?我可以用来调试代码的这两种情况有什么不同吗?

唯一的另一条信息是这都在一个docker容器中,这就是为什么我要检查顶部的环境变量。但我不认为这是一个问题。

0 个答案:

没有答案