0
我有一個使用SQLAlchemy的Flask應用程序,並且遇到了使用我的單元測試工作的多對多關係時遇到問題。在單元測試中未創建多對多的幫助表
在我setUp
方法創建我的應用程序,並初始化我的數據庫是這樣的:
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def setUp(self):
self.app = create_app(env='test')
self.app.logger.disabled = True
db.init_app(self.app)
with self.app.app_context():
db.create_all()
而在我的models.py我定義我的許多一對多這樣的:
contact_buying_categories = db.Table('contact_buying_category',
db.Column('contact_id', db.Integer, db.ForeignKey('contact.id')),
db.Column('category_id', db.Integer, db.ForeignKey('buying_categories.id'))
)
class Contact(db.Model):
__tablename__ = 'contact'
__bind_key__ = 'db1'
id = db.Column(db.Integer, primary_key=True)
buying_categories = db.relationship('BuyingCategory',
secondary=contact_buying_categories)
...
class BuyingCategory(db.Model):
__tablename__ = 'buying_categories'
__bind_key__ = 'db2'
id = db.Column(db.Integer, primary_key=True)
...
當我運行我的單元測試時,出現以下錯誤:
OperationalError: (OperationalError) no such table: contact_buying_category
u'SELECT buying_categories.id AS buying_categories_id, buying_categories.name AS
buying_categories_name \nFROM buying_categories, contact_buying_category \nWHERE ? =
contact_buying_category.contact_id AND buying_categories.id =
contact_buying_category.category_id' (1,)
如果我放入IPDB在setUp
的create_all()
呼叫並做db.metadata.tables
之後,它具有表定義:
'contact_buying_category': Table('contact_buying_category', MetaData(bind=None),
Column('contact_id', Integer(), ForeignKey('contact.id'), table=
<contact_buying_category>), Column('category_id', Integer(),
ForeignKey('buying_categories.id'), table=<contact_buying_category>), schema=None),
我很困惑,爲什麼不能應用找到contact_buying_category
表?我如何檢查它是否真的被創建?