tl;dr Proszę o ocenę mojego pierwszego kodowego projektu :)
w ramach nauki programowania tworzę sobie bibliotekę ułatwiającą komunikację pythona, a konkretnie biblioteki pandas z bazą postgresql. Oczywiście cały projekt jest dość w powijakach, a z programowania jestem raczej początkujący, więc pewnie roi się od bugów i brzydkiego kodu. Dlatego chciałbym Was prosić o opinię w każdym aspekcie, zwłaszcza o wskazanie co jest do poprawy zarówno w projekcie, jak i w sposobie mojego kodowania. Poniżej link do GitHuba:
@jascen: około półtora miesiąca, z tym że robiłem to po pracy i w weekendy no i też nie dzień w dzień. także ciężko określić ile godzin :/ @dog_meat: rzeczywiście nie pomyślałem o zamykaniu połączenia. myślisz że przy każdym wywołaniu funkcji powinno się łączyć i po wykonaniu funkcji zamykać? co do self.db_name to korzystam właśnie przy nawiązywaniu połączenia :)
Nigdy, ale to NIGDY nie składaj zapytań SQL poprzez łączenie stringów, tak jak robisz to teraz. To aż się prosi o SQL Injection
@dog_meat: tak tak, zdaję sobię sprawę. tam gdzie użytkownik podaje dane, tam jest to odpowiednio zabezpieczone, ale chyba rzeczywiście nie poprawiłem tego w kilku funkcjach, które wczesniej zdefiniowałem. mógłbyś mi tylko jeszcze wytłumaczyć o co chodziło z tym zbędnym self.db_name?
@meohaw: stworzenie normalnego pakietu będzie kolejnym krokiem, muszę póki co poczytać jak to się robi, póki co skupiałem się na bebechach. Do tego cholernego tabulatora się przyzwyczaiłem, trzeba to zmienić.
dog_meat dobrze mówi, zamykaj połączenie do bazy, ja bym trzymał otwarte tak długo jak żyje ten twój obiekt DBConnection (swoją drogą słaba nazwa na coś co robi tyle rzeczy, a nie tylko nawiązuje połączenie do bazy) a jak umiera to
@meohaw: @dog_meat: super, dzięki za uwagi, zaraz się biorę za wdrażanie. Mam nadzieję, że poza tym wygląda w miarę sensownie :P za jakiś czas wrzucę update :)
@meohaw: zająłem się czymś takim, bo uczę się też korzystania ze scikit-learn w połaczeniu z pandas, i wiem że dobra dwustronna komunikacja z bazą danych będzie mi niezbędna
wczytywanie do pandas to zrobiłem już trochę z rozpędu żeby było, ale czy jest jakaś biblioteka która w miarę łatwo pozwala robić update'y i inserty? nic nie mogłem znaleźć takiego, więc postanowiłem sam zrobić
Mirki, potrzebuję nauczyć się na gwałt podstaw R. Czy ktoś poleci jakieś konkretne materiały gdzie będzie pokazany dość duży zakres? Bo nie wiem czego nie wiem.
Czy w pythonie jest możliwość, żeby funkcja wewnątrz klasy mogła być użyta jedynie na użytek innych funkcji wewnątrz klasy? tak żeby nie można było z niej korzystać inaczej niż przy pisaniu innej funkcji wewnątrz klasy
czy taki sposób radzenia sobie z wyjątkami jak w tym fragmencie kodu jest poprawny? sprawdziłem kilka innych sposobów i ten obliczeniowo jest najszybszy, poza tym wydaje się najbardziej klarowny. Ale czy, hmm, zgodny z ogólnie przyjętą 'konwencją'?
nawiasem mówiąc - piszę sobie w ramach nauki bibliotekę pozwalającą na lepszą współpracę biblioteki pandas z bazą postgresql. jak skończę to chętnie się podzielę.
@biwalencik: ta funkcja schemaerrorraiser służy stricte do wyłapywania wyjątków. więc tą funkcję chcę wrzucić do funkcji, którą zamieściłem w pastebin (gettablepk). a następnie ją wywołać wywoływać:
try: ___gettablepk(table, schema) except ValueError as e: ___logger.error(e)
@Kiro: dokładnie tak robiłem wcześniej, komentarz wyżej napisałem sposób postępowania. Czyli wcześniejsze rozwiązanie, które już miałem, jest prawidłowe tylko za bardzo chciałem przykombinować :) dzięki za pomoc
@biwalencik: ale te pakiety są niewygodne jeśli chce się załadować DataFrame do bazy, albo wczytać bezpośrednio z bazy do DataFrame'u (mówie tu o DataFrame z pakietu pandas). nigdzie nie mogłem znaleźć żadnego pakietu który by pozwolił to wygodnie łączyć, a funkcji wbudowanych w pandas jest mało i są mało praktyczne. Jak tylko skończę pisać to pochwalę się co z tego wyszło
@biwalencik: tak, wiem, tylko sam pandas nie został napisany po to żeby się komunikować z bazami, więc ma narzędzi do tego mało i sprawdzałem - nie pasują mi. a z zapisywania do bazy ma tylko to_sql, które też jest mało elastyczne i robi dziwne rzeczy z tabelami - np nie potrafi ich zaktualizować
@biwalencik: tego nie kojarze, ale tutaj jak na szybko przejrzałem dokumentację to też nie widzę np. możliwości aktualizowania rekordów po kluczu głównym. Pozostanę raczej przy napisaniu swojej skromnej biblioteki, dodatkowo pewnie sporo się przy tym nauczę :) Ale dzięk iza wszystkie rady, zarówno Tobie jak i @Kiro:
tl;dr Proszę o ocenę mojego pierwszego kodowego projektu :)
w ramach nauki programowania tworzę sobie bibliotekę ułatwiającą komunikację pythona, a konkretnie biblioteki pandas z bazą postgresql. Oczywiście cały projekt jest dość w powijakach, a z programowania jestem raczej początkujący, więc pewnie roi się od bugów i brzydkiego kodu. Dlatego chciałbym Was prosić o opinię w każdym aspekcie, zwłaszcza o wskazanie co jest do poprawy zarówno w projekcie, jak i w sposobie mojego kodowania. Poniżej link do GitHuba:
Link
@dog_meat: rzeczywiście nie pomyślałem o zamykaniu połączenia. myślisz że przy każdym wywołaniu funkcji powinno się łączyć i po wykonaniu funkcji zamykać? co do self.db_name to korzystam właśnie przy nawiązywaniu połączenia :)
@dog_meat: tak tak, zdaję sobię sprawę. tam gdzie użytkownik podaje dane, tam jest to odpowiednio zabezpieczone, ale chyba rzeczywiście nie poprawiłem tego w kilku funkcjach, które wczesniej zdefiniowałem. mógłbyś mi tylko jeszcze wytłumaczyć o co chodziło z tym zbędnym self.db_name?
wczytywanie do pandas to zrobiłem już trochę z rozpędu żeby było, ale czy jest jakaś biblioteka która w miarę łatwo pozwala robić update'y i inserty? nic nie mogłem znaleźć takiego, więc postanowiłem sam zrobić