2012-11-16 24 views
6

我正在嘗試在一個簡單的測試應用程序中進行flask-sqlalchemy。 我運行一個SQL服務器,我可以從瓶連接到使用SQLAlchemy的,像這樣:如何在flask-sqlalchemy中使用反射/自動加載

from flask import render_template 
from app import app, db 

@app.route('/') 
@app.route('/index') 
def index(): 

    people = list(db.session.execute("select top 10 * from people where ppl_username IS NOT NULL")) 

不過,我也想使用SQLAlchemy的SQL僞語言和ORM部分查詢。因爲這是一個現有的數據庫我不想寫我自己的類和生成數據庫,我想反映現有的數據庫並以此方式訪問它。 我找到了the reflect method in the API docs,但我無法弄清楚如何(以及在​​哪裏)使用它。

除了想知道如何做到這一點,我也想知道:

  • 數據庫反射會發生在每個請求上還是僅在應用程序的開始? (這是一個很大的數據庫,所以每一個請求都會成爲一個阻止)
  • 是否有可能爲數據庫中的類生成代碼並將其保存以供將來使用,如Django的inspectDB()所做的那樣?

感謝,

回答

4

是的,它是所有可能的。我使用sqlautocode來完成你正在談論的內容。它生成sqlalchemy代碼以在sqlalchemy中創建表/列並將它們放入文件中。只需安裝它,然後從命令行運行它。

這從現有的MySQL數據庫的Web應用程序我產生模型SQLAlchemy的模型,並創建一個文件alchemy_models.py:

sqlautocode mysql://<dbuser>:<pass>@localhost:3306/<dbname> -o alchemy_models.py

注意MySQL的://位僅僅是產生連接的syntaxt在SA

希望這會有幫助

+0

這當然有幫助。我做了一個快速測試,儘管我仍然需要弄清楚如何實現與flask-sqlalchemy有關的這個測試,但我的小測試似乎很有效。我可以從這裏出發,謝​​謝你! –