sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLを使用したSQLAlchemyテストでのデータベースの作成

    ノーズ テストランナーはsetup_package()をサポートします およびteardown_package() メソッド。ドキュメントからの抜粋は次のとおりです:

    私のアプリケーションにはsetup_package()があります これはおおよそ次のようになります:

    def _create_database():
    
        template_engine = sa.create_engine("postgres://[email protected]/postgres", echo=False)
    
        conn = template_engine.connect()
        conn = conn.execution_options(autocommit=False)
        conn.execute("ROLLBACK")
        try:
            conn.execute("DROP DATABASE %s" % DB_NAME)
        except sa.exc.ProgrammingError as e:
            # Could not drop the database, probably does not exist
            conn.execute("ROLLBACK")
        except sa.exc.OperationalError as e:
            # Could not drop database because it's being accessed by other users (psql prompt open?)
            conn.execute("ROLLBACK")
    
        conn.execute("CREATE DATABASE %s" % DB_NAME)
        conn.close()
    
        template_engine.dispose()
    
    
    def setup_package():
        _create_database()
    
        engine = sa.create_engine("postgres://[email protected]/%s" % DB_NAME, echo=False)
    
        session = sa.orm.scoped_session(sa.orm.sessionmaker())
        session.configure(bind=engine)
        Base.metadata.bind = engine
        Base.metadata.create_all()
    
    
    def teardown_package():
        # no need to do anything as the old database is dropped at the start of every run
    

    さらに、すべてのテストケースクラスは基本クラスからサブクラス化されます。基本クラスは、重要なことに、共通のtearDownを定義します。 方法:

    class BaseTest(unittest.TestCase):
    
        def setUp(self):
            # This makes things nicer if the previous test fails
            # - without this all subsequent tests fail
            self.tearDown()
    
            self.config = testing.setUp()
    
        def tearDown(self):
            testing.tearDown()
            session.expunge_all()
            session.rollback()
    

    サブクラスは多くの場合、ベースのsetUpをオーバーライドします 、ただし、通常はtearDownをオーバーライドする必要はありません。 -トランザクションをロールバックすることで、次のテストが完全にクリーンなデータベースで開始されるようにします。




    1. MySQLMyISAMテーブルのパフォーマンスの問題の再検討

    2. PostgreSQL-LIMITOFFSETから行を繰り返す

    3. 動的カーソルOracle

    4. mysqlで正確な文字列を検索する方法