你如何測試你使用postgresql的python DAL。python中的數據庫測試,postgresql
在sqlite中,您可以爲每個測試都創建內存數據庫,但這不能用於postgresql。
我想要一個庫,可以用來設置數據庫並在測試完成後清理它。
我正在使用Sqlalchemy作爲我的ORM。
你如何測試你使用postgresql的python DAL。python中的數據庫測試,postgresql
在sqlite中,您可以爲每個測試都創建內存數據庫,但這不能用於postgresql。
我想要一個庫,可以用來設置數據庫並在測試完成後清理它。
我正在使用Sqlalchemy作爲我的ORM。
您可以使用nose來編寫測試,然後使用SQLAlchemy在您的setup/teardown方法中創建並清理測試數據庫。
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
將等待所有活動連接關閉。
也有QuickPiggy,它可以自行清理。 從文檔:
甲臨時PostgreSQL的實例可以很容易地獲得:
豬= quickpiggy.Piggy(揮發性=真,CREATE_DB = 'somedb')
康恩= psycopg2.connect (pig.dsnstring())
@Luper Rouch:我應該如何清理,以便數據庫在測試完成後處於相同狀態。我不認爲啓動/回滾事務是解決方案。 – StackUnderflow 2010-04-27 17:31:39
你可以從拆卸整個數據庫開始。 – 2010-04-27 17:36:30
所以我將不得不爲每個測試創建一個新的數據庫實例..不會讓測試非常慢?..我只想要清理數據庫中的所有數據...我想我可以編寫SQL來清理所有表格數據在拆解..雖然我正在尋找像SQLUnit – StackUnderflow 2010-04-27 17:40:08