PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създаване на бази данни в SQLAlchemy тестове с PostgreSQL

Нос тестовият инструмент поддържа 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy with_for_update заключване на ред не работи?

  2. използване на схеми в postgresql

  3. Как да настроя разширение на Postgres?

  4. PostgreSQL:дублираната стойност на ключ нарушава уникалното ограничение на командата UPDATE

  5. Грешка при PG COPY:невалиден синтаксис на въвеждане за цяло число