SQLAlchemy
をインポートすると、あなたは、そのモジュールの内部名への直接アクセスを与えることはありません。また、flask_sqlalchemy
(以前のflask.ext.sqlalchemy
)モジュールを使用すると、SQLAlchemyの機能にアクセスするために多少異なるメカニズムが使用されることにも注意してください。つまり、SQLAlchemy
の現在の知識を転送しようとする試みは、flask_sqlalchemy
documentationの調査によって通知されます。
通常、Flaskアプリケーションを作成し、それをSQLAlchemy
as in this exampleの呼び出しに渡します。関連するコードを以下に示します。
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
db
オブジェクトは現在の属性としてModel
、Column
と様々なデータ型を持っているので、あなたは、次のように表/モデルを定義することができます。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
単にモジュールからインポートし、それらが修飾されていない使用するのではなくdb
名前空間内の様々な名を修飾するために私を強制するので、私は個人的に、この特定のアクセスモデルが好きではないけど、動作しているようです(少なくとも比較的複雑でないデータベースの場合)。
経験豊かなSQLAlchemyユーザーは、標準のアクセスメカニズムを使用することを検討することをお勧めしますが、予期しないスレッド/ Webセッションのやりとりによる微妙なバグに対して脆弱になる可能性があります。私は、複数のデータベースを展開するのは難しいかもしれないと聞いています。私はこれについての直接の証拠はないので、それを事例とみなしてください。
仮想環境にSQLAlchemyをインストールしましたか? – SumanKalyan
この動作は明らかに、 'flask_sqlachemy'を明らかにそうでないときに "native"または "real" 'sqlalchemy'であるかのように扱うためです。 ['flask_sqlachemy' documentation](http://flask-sqlalchemy.pocoo.org/2.1/)のどこにも、あなたが推奨または文書化したコードがあります。私はそれが明白にフラグが立てられている場合、それが有用であることに同意します - 私はFlaskを初めて使用したときと同じミスを犯しました。 – holdenweb