У меня есть проект Python, который использует Postgresql. Я хотел бы использовать django-подобные модульные тесты, где база данных создается и уничтожается при каждом тесте. Однако я не хочу использовать sqlalchemy.
Я пробовал что-то вроде этого:
pg = psycopg2.connect(
"host={} dbname={} user={} password={}".format(
POSTGRES_HOST, 'postgres', POSTGRES_USER, POSTGRES_PASSWORD))
pg.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = pg.cursor()
def reset_db():
cur.execute('DROP DATABASE IF EXISTS {} '.format(POSTGRES_DB))
cur.execute('CREATE DATABASE {}'.format(POSTGRES_DB))
newconn = psycopg2.connect(
"host={} dbname={} user={} password={}".format(
POSTGRES_HOST, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD))
newcur = newconn.cursor()
# SCHEMAS is an imported dict containing schema creation instructions
for schema in SCHEMAS:
newcur.execute(SCHEMAS[schema])
return newcur
class Test(TestCase):
def setUp(self):
os.environ['testing'] = 'true'
self.cur = reset_db()
Затем метод setUp устанавливает переменную среды, которая информирует мой уровень базы данных об использовании базы данных тестирования.
Кажется, это работает нормально. Единственная проблема заключается в том, что reset_db () занимает около 0,8 секунд, что слишком много.
Есть ли лучшие подходы или способы оптимизировать мой подход?