5

你如何测试你使用postgresql的python DAL。python中的数据库测试,postgresql

在sqlite中,您可以为每个测试都创建内存数据库,但这不能用于postgresql。

我想要一个库,可以用来设置数据库并在测试完成后清理它。

我正在使用Sqlalchemy作为我的ORM。

回答

2

您可以使用nose来编写测试,然后使用SQLAlchemy在您的setup/teardown方法中创建并清理测试数据库。

+0

@Luper Rouch:我应该如何清理,以便数据库在测试完成后处于相同状态。我不认为启动/回滚事务是解决方案。 – StackUnderflow 2010-04-27 17:31:39

+0

你可以从拆卸整个数据库开始。 – 2010-04-27 17:36:30

+0

所以我将不得不为每个测试创建一个新的数据库实例..不会让测试非常慢?..我只想要清理数据库中的所有数据...我想我可以编写SQL来清理所有表格数据在拆解..虽然我正在寻找像SQLUnit – StackUnderflow 2010-04-27 17:40:08

3

pg_tmp(1)是一个实用程序,旨在使此任务变得轻松。这里是你将如何启动与SQLAlchemy的一个新的连接:

from subprocess import check_output 
from sqlalchemy import create_engine 

url = check_output(['pg_tmp', '-t']) 
engine = create_engine(url) 

这将旋转起来是在60秒后自动摧毁了一个新的数据库。如果连接打开,pg_tmp将等待所有活动连接关闭。

0

也有QuickPiggy,它可以自行清理。 从文档:

甲临时PostgreSQL的实例可以很容易地获得:

猪= quickpiggy.Piggy(挥发性=真,CREATE_DB = 'somedb')

康恩= psycopg2.connect (pig.dsnstring())