簡體   English   中英

在帶有 SQLAlchemy Core 和 Flask 的項目中,我在哪里以及如何使用 Table() 調用?

[英]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
        ...
    ...

我特別掙扎的是以下幾點:

  1. 我應該將metadata = MetaData()放入tables/__init__.py並將其導入tables/__init__.py文件嗎?
  2. 如果我想訪問我的表,我是否應該簡單地從tables/tablesX.py文件中導入實例?
  3. 對我來說完美的解決方案是將所有表放入元數據對象中。 如果然后我需要訪問例如視圖中的表,我可以簡單地使用table = meta.tables[table_name]將表從元數據table = meta.tables[table_name] 但我不知道如何傳遞元數據對象以保存所有表。
  4. 還是我在這里完全走錯了路,我是否應該直接在我的 views.py 文件中創建表描述(即調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM