[英]Where do I put and how to use Table() calls in a project with SQLAlchemy Core and flask?
所以我想在應用程序中使用 SQLAlchemy Core 和 Flask。 我已經通讀了文檔和許多如何構建應用程序的教程。 所有 SQLAlchemy Core 教程都將數據庫描述直接放入應用程序的 app.py 文件中。 我想把這個數據庫描述放到它自己的 python 模塊中(這里稱為表/),並在我的視圖、表單等中使用它。所以我想實現一個基本的布局,如下所示:
myapp/
run.py
tables/
__init__.py
tables1.py
tables2.py
...
views/
views1.py
...
...
我特別掙扎的是以下幾點:
metadata = MetaData()
放入tables/__init__.py
並將其導入tables/__init__.py
文件嗎?tables/tablesX.py
文件中導入實例?table = meta.tables[table_name]
將表從元數據table = meta.tables[table_name]
。 但我不知道如何傳遞元數據對象以保存所有表。table = Table(name, tmp_metadata,...)
?感謝您的時間和最美好的祝願,
啊
讓我們一步一步來。 最小應用:
from sqlalchemy import ...
from flask import ...
from flask.ext.sqlalchemy import ...
app = Flask()
db = SQLAlchemy()
class Foo(db.Model):
...
@app.route(...)
def foo():
Foo.query.filter(...)
return ...
讓我們將 db 的東西移到一個單獨的模塊中:
# db.py
from sqlalchemy import ...
from flask.ext.sqlalchemy import ...
from .app import app
db = SQLAlchemy(app)
class Foo(db.Model):
...
# app.py
from flask import ...
from .db import Foo
app = Flask()
@app.route(...)
def foo():
Foo.query.filter(...)
return ...
但是等等,我們有一個循環依賴,所以我們必須將app
移出:
# app.py
from flask import *
app = Flask()
# db.py
from sqlalchemy import ...
from flask.ext.sqlalchemy import ...
from .app import app
db = SQLAlchemy(app)
class Foo(db.Model):
...
# views.py
from flask import ...
from .db import Foo
from .app import app
@app.route(...)
def foo():
Foo.query.filter(...)
return ...
接下來,我們可以拆分db.py
:
# app.py same
# views.py same
# db/__init__.py
from flask.ext.sqlalchemy import ...
from ..app import app
from .foo import Foo
db = SQLAlchemy(app)
# db/foo.py
from sqlalchemy import ...
from . import db
class Foo(db.Model):
...
但是等等,我們又有了一個循環依賴,所以我們必須將db
移出:
# app.py same
# views.py same
# db/__init__.py
from .common import db
from .foo import Foo
# db/common.py
from flask.ext.sqlalchemy import ...
from ..app import app
db = SQLAlchemy(app)
# db/foo.py
from sqlalchemy import ...
from .common import db
class Foo(db.Model):
...
SQLAlchemy 核心配置完全相同,除了用你的foo_table = Table(...)
聲明替換class Foo
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.