模拟数据库连接

时间:2016-01-18 23:00:25

标签: python database mocking flask-sqlalchemy python-unittest

我想模拟数据库连接并执行。我正在使用SQLAlchemy。这是在我的__init__.py文件

app = Flask(__name__)
app.config.from_object(ANALYTICS_CONFIG)
app.json_encoder = ModelEncoder

db = SQLAlchemy(app)

然后在我的模型中,我有以下功能:

def get_campaigns(self, start, end, columns, filter=None):
        page_view = PageView.__table__

        unique = self.get_attribution_subquery(start, end, filter)

        table_columns = text(', '.join(['campaign_' + c for c in columns]))
        where_clause =  text(' AND '.join(['campaign_%s IS NOT NULL' % c for c in columns]))

        join_clause = self.get_attribution_model_join_clause(unique)

        query = select([
            table_columns,
            func.count(page_view.c.id),
            func.count(unique.c.submission_id)
        ]).select_from(
            unique.join(
                page_view,
                join_clause
            )
        ).where(
            where_clause
        ).group_by(
            table_columns
        )

        result = db.engine.execute(query)

        result_columns = columns + ['views', 'conversions']

        campaigns = []
        for row in result:
            row = dict(zip(result_columns, row))

            row['conversionRate'] = self.get_rate(row['conversions'], row['views'])

            campaigns.append(row)

        return campaigns

我不想连接到数据库,我想伪造db.engine.execute(query)的返回。我正在考虑修补猴子,但我不确定如何做到这一点或如何解决这个问题。

0 个答案:

没有答案