5

Flask-SQLAlchemy を使用する Flask アプリがあります。私の単体テストでは、アプリとDBを初期化してから呼び出しますがdb.create_all()、何らかの理由でモデルを取得していないように見えるため、テーブルを作成していません。

2 つのデータベースがあるため、モデルで__tablename__との両方を使用しています。__bind_key__

私の設定:

SQLALCHEMY_DATABASE_URI = 'sqlite://'

SQLALCHEMY_BINDS = {
    'db1': SQLALCHEMY_DATABASE_URI,
    'db2': SQLALCHEMY_DATABASE_URI
}

setUp()単体テストでメソッドのバージョンを削減します。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

class APITestCase(unittest.TestCase):

    app = Flask(__name__)
    db = SQLAlchemy(app)
    db.create_all()

各バインド タイプから 1 つずつ、2 つのモデルの例を次に示します。

class Contact(db.Model):

    __tablename__ = 'contact'
    __bind_key__ = 'db1'

    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    ...

    def __init__(first_name, last_name):
        self.first_name = first_name
        self.last_name = last_name
        ...

class BaseUser(db.Model):

    __tablename__ = 'User__GeneralUser'
    __bind_key__ = 'db2'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column('Username', db.String(100))
    first_name = db.Column('FirstName', db.String(100))
    last_name = db.Column('Surname', db.String(100))
    ...

    def __init__(username, first_name, last_name):
        self.username = username
        self.first_name = first_name
        self.last_name = last_name
        ...

明らかに明らかなことを見逃していませんか?Flask-SQLAlchemy は、関連付けられたテーブルを作成するためにモデルを探す場所をどのように認識しますか?

4

2 に答える 2

13

単体テストでは、SQLAlchemy オブジェクト ('db') の新しいインスタンスを作成しないでください。モデルの派生元であるインスタンスをインポートする必要があります。

models.py:

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Contact(db.Model):
    ...

tests.py:

from models import db
from flask import Flask
import unittest

class TestExample(unittest.TestCase):

    def setUp(self):
        self.app = Flask(__name__)
        db.init_app(self.app)
        with self.app.app_context():
            db.create_all()
于 2013-02-25T14:26:16.077 に答える
-2

SQLALCHEMY_DATABASE_URI が間違っています。エンジン Sqlite データベースの設定方法はこちらをお読みくださいhttp://docs.sqlalchemy.org/en/rel_0_9/core/engines.html#sqlite

経験したことがない場合は、このリポジトリを参照して、アプリに適用してください:) https://github.com/Fird0s/Banda-Maps/blob/master/models.py

于 2013-11-01T12:32:54.923 に答える