I have a Flask application that uses Flask-SQLAlchemy. In my unit tests, I initialize the application and the database, then call db.create_all() , and for some reason it looks like it doesnβt match any of my models, therefore it doesnβt create any tables.
I use both __tablename__ and __bind_key__ in my models, as I have two databases.
My configuration:
SQLALCHEMY_DATABASE_URI = 'sqlite://' SQLALCHEMY_BINDS = { 'db1': SQLALCHEMY_DATABASE_URI, 'db2': SQLALCHEMY_DATABASE_URI }
Cut the version of my setUp() method in my unit tests:
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy class APITestCase(unittest.TestCase): app = Flask(__name__) db = SQLAlchemy(app) db.create_all()
Here is an example of my two models: one from each type of binding:
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 ...
Am I missing something obvious? How does Flask-SQLAlchemy know where to look for my models to create related tables?
source share