PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Tworzenie baz danych w testach SQLAlchemy z PostgreSQL

Nos program uruchamiający test obsługuje setup_package() i teardown_package() metody. Oto fragment z dokumentacji:

W mojej aplikacji mam setup_package() który wygląda mniej więcej tak:

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

Ponadto wszystkie klasy przypadków testowych są podklasami klasy bazowej, która, co ważne, definiuje wspólny tearDown metoda:

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()

Podklasy często zastępują podstawowe setUp , ale zwykle nie ma potrzeby zastępowania funkcji tearDown - cofając transakcję zapewnia, że ​​następny test rozpocznie się na całkowicie czystej bazie danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pula połączeń bazy danych pracownika selera

  2. Interwał dopasowania PostgreSQL między czasem rozpoczęcia i zakończenia względem znacznika czasu

  3. Zręczne generowanie kodu tylko dla jednego schematu

  4. Jak przeskoczyć z innymi kolejnymi rekordami po osiągnięciu stanu?

  5. Wstawianie prawidłowego json z kopią do tabeli postgres