首页 > 解决方案 > 如何在 Python 中为数据库创建存根?

问题描述

我希望能够创建一个数据库存根(或模拟),以便测试一个查询数据库的函数,而不是使用 Pandas 返回一个数据框。目前,我无法正确创建正确模拟的数据库,因此不会创建数据框。我不确定我哪里出错了。

def p2ctt_data_frame():
    conn = pyodbc.connect(
        r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
        r'DBQ=My\Path\To\Actual\Database\Access Database.accdb;'
    )

    query = 'select * from P2CTT_2016_Plus0HHs'

    df = pd.read_sql(query, conn)
    return df


class TestMockDatabase(unittest.TestCase):

    @mock.patch('directory1.script1.pyodbc.connect')
    def test_mock_database(self, mock_con):

        mock_con.return_value.execute.return_value.fetchall.side_effect = [('1', '2', '3'), (1, 2, 3)]

        expected = pd.DataFrame({
            '1': [
                1
            ],
            '2': [
                1
            ],
            '3': [
                3
            ]
        })

        result = p2ctt_data_frame()

        tm.assert_frame_equal(result, expected)

我希望结果与预期的数据帧相匹配,但事实并非如此。目前,我收到以下错误:

AssertionError:DataFrame 不同

DataFrame 形状不匹配 [左]: (0, 0) [右]: (1, 3)

标签: databasepython-3.xpandasmockingstub

解决方案


推荐阅读