所以我想在应用程序中使用SQLAlchemy Core和flask。我已经阅读了文档和许多教程,了解如何构建应用程序。所有SQLAlchemy Core教程都将数据库描述直接放入应用程序的app.py文件中。我想将这个数据库描述放入它自己的python模块(在这里称为tables /),并在我的视图,表单等中使用它。所以我想实现如下的基本布局:
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 = Table(name, tmp_metadata,...)
?感谢您的时间和祝福,
A.H。
答案 0 :(得分:0)
让我们一步一步做。最小的申请:
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.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 Core配置完全相同,只是将class Foo
声明替换为foo_table = Table(...)
。