Aktywne Wpisy

Vaclav +352
źródło: temp_file4562240958270307988
Pobierz
PodniebnyMurzyn +11
1250 zł brutto za wymianę oleju z filtrami i przegląd auta, a niech mnie dunder świśnie.
Skopiuj link
Skopiuj link
źródło: temp_file4562240958270307988
Pobierz
Regulamin
Reklama
Kontakt
O nas
FAQ
Osiągnięcia
Ranking
Mam model w którym wykorzystuję typ "CITEXT". Do testów muszę stworzyć fiksturę która zrobi mi migrację oraz zarejestruje wspomniany typ. Niby mi się to udaje ale nie do końca ( ͡° ʖ̯ ͡°)
Na czas dochodzenia zrobiłem sobie taki oto skrypcik:
import osfrom sqlalchemy import create_engine, text
from wykop.models import Base
engine = create_engine(os.getenv("POSTGRES_DATABASE_URI"))
connection = engine.connect()
connection.execute(text("SHOW search_path;")).fetchone()
connection.execute(text("SET search_path TO public;"))
connection.execute(text("SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'citext');")).fetchone()
connection.execute(text("CREATE EXTENSION IF NOT EXISTS citext;"))
connection.execute(text("SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'citext');")).fetchone()
engine.dispose()
engine = create_engine(os.getenv("POSTGRES_DATABASE_URI"))
connection = engine.connect()
connection.execute(text("SELECT EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'citext');")).fetchone()
Base.metadata.create_all(bind=engine)
Cały problem polega na tym, że mimo, że drugie wywołanie komendy:
zwraca True to trzecie zwraca False i nie ma szans wykonania:
bo otrzymuję error:
Zatem nie udało się trwale zarejestrować typu "CITEXT".
Z GPT zatoczyłem koło po którym zaczął dawać ponownie te same odpowiedzi.
Czegoś mi tu brakuje. Może źle kończę połączenie? Próbowałem wielu innych metod znalezionych na stacku i w tutorialach. Wynik za każdym razem jest ten sam.
#python #bazydanych
@Patrick_Rowerovsky: Próbowałeś pytać nie o pomoc w rozwiązaniu problemu ale o napisanie skryptu od zera ?
Może napisze coś tak, że zorientujesz sie gdzie leży błąd ?
1. może potrzebujesz jeszcze .commit() żeby zapisać zmiany na koniec pierwszej sesji engine, nie pamiętam
2. dla pierwszej instancji engine ustawiasz explicite search_path, może w drugiej po prostu szuka w złym miejscu
publicprzed i po. Sprawdzę commit....session.commit()
session.close()
engine