database - 如何在 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)
解决方案
推荐阅读
- laravel - LogicException:请确保已安装并启用 PHP Redis 扩展
- c# - 实体框架添加重复的外键
- typescript - Angular 9更新对象数组中的对象
- java - RecyclerView onClickListener 显示错误
- css - 如何处理手机浏览器导航栏?
- c# - Unity - 如何使用精灵渲染器制作圆形进度条?
- r - 查找多列中的差异并计算更改
- vue-router - vue-router 下一个方法在 beforeach 中并不总是有效
- c++ - 为什么一个空行占用两个字节?
- android - 将 OSM (OpenStreetMap) 放入自定义形状