Aktywne Wpisy
lologik +111
arysto2011 +100
#globcio #bekazlewactwa #ocieplenieklimatu
W latach 90. popularna była dziura ozonowa i kwaśne deszcze. W Świecie Nauki i innych popularnonaukowych czasopismach pisano poważnie, że będziemy żyć pod kopułami, bo z nieba za 10 lat będzie leciał kwas. Co drugi mieszkaniec Ziemi miał umrzeć na czerniaka skóry.
Widać dzisiaj, że po 30 latach ta narracja jest identyczna, ale bardziej wyrafinowana. Walczy się z naturalnymi zjawiskami, które mają miejsce - ze zmianami klimatycznymi. Jak świat
W latach 90. popularna była dziura ozonowa i kwaśne deszcze. W Świecie Nauki i innych popularnonaukowych czasopismach pisano poważnie, że będziemy żyć pod kopułami, bo z nieba za 10 lat będzie leciał kwas. Co drugi mieszkaniec Ziemi miał umrzeć na czerniaka skóry.
Widać dzisiaj, że po 30 latach ta narracja jest identyczna, ale bardziej wyrafinowana. Walczy się z naturalnymi zjawiskami, które mają miejsce - ze zmianami klimatycznymi. Jak świat
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
idea opiera się na tym, żeby w móc w prosty sposób wczytywać dane z db prosto do DataFrame, ale też w prosty sposób przeprowadzać inserty, update'y i wyciągać podstawowe informacje nt. tabel, kolumn, kluczy głównych, schematów itp. Nie mogłem za bardzo znaleźć biblioteki która by DataFrame'y łatwo ładowała do bazy, więc stwierdziłem że sam napiszę, ale jeśli ktoś takie zna (oprócz samego pandas, który ma mocno ograniczone funkcjonalności w tym zakresie), to super by było, gdyby się podzielił ;)
wołam także @Kiro i @biwalencik, z którymi niedawno przeprowadziłem krótką dyskusję na temat sensu pisania takiej biblioteki, może będziecie zainteresowani pierwszymi wynikami :)
Ogólnie to ja bym nie sprawdzał tego is instance wcale w tym miejscu
@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 :)
Wcięcia to powinny być 4 spacje a nie twardy tabulator.
Pomyśl czy nie warto by napisać troszkę testów jednostkowych, przynajmniej do najważniejszych części.
Masz u góry kilka importów z których nie korzystasz (time, decimal, datetime)
Formatowanie twojego kodu bardzo utrudnia czytanie go, np te zapytania sql, czasem wcięte
@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?
Zamykanie połączeń robiłbym przez kontekst managera (chyba najlepiej jako osobną klasę), która zwróci Ci obiekt Twojej klasy do operowania na nim w bloku with.
Tam gdzie robisz p.connect() to sklejasz niezdarnie te stringi, zamiast używać keyword arguments
za http://initd.org/psycopg/docs/module.html
http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql.html
Czego ci tam brakowało tak konkretnie? W sumie tak samo w tosql, czego ci brakowało przy zapisie?
Pandas się lubi z SQLAlchemy, więc one razem całkiem sprawnie robią większość operacji, dlatego nie znam biblioteczki która by robiła to co twoja.
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ć
http://odo.pydata.org/en/latest/overview.html
Nie ma co wynajdywac kola od nowa.
odo(df, 'postgresql://hostname::tablename')
Jeśli tak to może rzeczywiście to wszystko niepotrzebne :P ale co się nauczyłem to moje :D
Potrafi wszystko to co sqlAlchemy i tam też wcześniej Cie kierowałem.
To również jeden z głównych mankamentów Twojego kodu. Używasz formatowania stringów do generowania zapytań SQLa i wrzucasz je na exec do bazy.
Jeśli umiejętnie zbudujesz klasę opisującą Twoje dane, to możesz robić wszystko, na co stać SQLAlchemy. A stać go na wiele. Na dodatek współbieżnie.
http://docs.sqlalchemy.org/en/latest/dialects/postgresql.html