2016-04-26 32 views
0

我嘗試使用下面的代碼連接到一個我們公司內部數據庫:SQLAlchemy中沒有找到表,可能的連接問題

engine = create_engine('postgresql+psycopg2://{user}:{passw}@{host}:{port}/{db}'.format(
     user=config3.CANVAS_USERNAME, 
     passw=config3.CANVAS_PWD, 
     host=config3.CANVAS_BOUNCER, 
     port=config3.CANVAS_PORT, 
     db='cluster17dr' 
    )) 
metadata = MetaData() 
    metadata.reflect(bind=engine) 
    print(metadata.tables) 

而我唯一的結果是一個名爲「spatial_ref_sys」表,這是我承擔是某種元數據。我知道我的登錄信息是正確的,因爲這是完美的:

with ppg2.connect(
     database='cluster17dr', 
     user=config3.CANVAS_USERNAME, 
     password=config3.CANVAS_PWD, 
     host=config3.CANVAS_BOUNCER, 
     port=config3.CANVAS_PORT) as conn: 
     cur = conn.cursor() 
     sql = 'SELECT * FROM canvas.switchman_shards LIMIT 10' 

     cur.execute(sql) 

     res = cur.fetchall() 
     print(res) 

任何想法,我在我的連接使用SQLAlchemy缺少什麼?

+1

嘗試指定'metadata.reflect(...模式= 「畫布」)'? – univerio

+0

這樣做。創建一個答案,我會接受:) – flybonzai

回答

1

默認情況下,如果未指定模式名稱,則SQLAlchemy將只爲您提供默認模式下的表。如果你想反映一個模式不是默認模式中的表等(默認爲PostgreSQL的public它),你需要指定schema關鍵字.reflect()

metadata.reflect(..., schema="canvas")