Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyData Warsaw 2017, 19-20 października - konferencja Data Science
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Django - przejście z sqlite na mysql  (Przeczytany 539 razy)
« : 23:43 08/08/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 286


Z bazami danych miałem do tej pory styczność okazjonalną i zaczynam się w tym temacie powoli gubić. Chciałem sobie przerobić moją aplikację w taki sposób żeby korzystała z mysql. Na razie przy pomocy pipa zainstalowałem sobie w virtualenvie mysqlclient. Na tym skończyły się moje boje, bo nie wiem co dalej. Główny komputer jest na Windowsie i tu muszę jakoś zainstalować mysql. Ściągnąłem instalatora, ale w tracie próby zainstalowania bazy otrzymuję informację, że brakuje mi Visual C++ 2013/2015 Runtime. Domyślam się, że po instalacji wszystkich pakietów z instalatora będę miał dostęp do shella mysql i będę w stanie utworzyć bazę danych, usera, hasło i po prostu wrzucić wszystko do settings.py. Potem sobie zrobię coś w ten deseń: https://stackoverflow.com/questions/3034910/whats-the-best-way-to-migrate-a-django-db-from-sqlite-to-mysql i będę miał przetransferowaną bazę.

Zna ktoś jakiś przystępny poradnik obsługi mysql na Windowsie dla pisania apek Django (moja aplikacja jest w 1.10, python 3.5.2)? Dodam, że próbowałem zainstalować mysql poprzez instalatora i udało się wyłącznie z MySQL Notifier (Server i Shell nie instalują się z uwagi na brak wymaganych komponentów). Serwer na którym będzie testowana aplikacja obsługuje zarówno mysql jak i postgresql. Może lepiej starać się uczyć drugiej opcji? Dzięki za wszelkie rady.

EDIT: Udało mi się zainstalować mysql (server, workbench, shell, notifier). Jutro powalczę z tym dalej. Mam nadzieję, że teraz wystarczy jakoś utworzyć bazę i powiązać ją z Django. Zastanawia mnie tylko ten shell, który nie jest w virtualenvie. Na jakiej zasadzie virtualne środowisko będzie się łączyło z bazą utworzoną poza tym środowiskiem?
Zapisane
« Odpowiedz #1 : 11:02 09/08/17 »
DJangoL Offline
Advanced Python User

Zobacz profil
**

Reputacja: 19
Wiadomości: 247


Jak masz duże problemy z MySQL to możesz do nauki użyć początkowo bazy SQLite dostarczanej z Django.

Jak chcesz koniecznie MySQL to tu cały proces jest nieźle opisany:

http://www.swegler.com/becky/blog/2011/08/27/python-django-mysql-on-windows-7-part-i-getting-started/

W Settingach wpiszesz mniej więcej coś takiego:

Kod
DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'myproject',
       'USER': 'myprojectuser',
       'PASSWORD': 'password',
       'HOST': 'localhost',
       'PORT': '3306',  # U mnie jest port 3306
   }
}
 
 

Z Virtualenv zainstaluj mysqlclient:

Cytuj
pip install mysqlclient

Po tym wszystkim robi się migrację bazy:

Kod
cd ~/myproject
python manage.py makemigrations
python manage.py migrate

Fachowo tego nie opisałem - tylko wg. tutoriala - ale u mnie pod Win7 działa bez problemów.
Zapisane
« Odpowiedz #2 : 22:07 09/08/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 286


Cytuj
Fachowo tego nie opisałem - tylko wg. tutoriala - ale u mnie pod Win7 działa bez problemów.

Wszystko zrobiłem jak należy, ale przy próbie migracji wywala mi błąd: django.db.utils.ProgrammingError: (1146, "Table 'testowa.constance_config' doesn't exist")

Coś tu django-constance psuje, ale nie mam pojęcia jak to obejść. Tutaj podaję moje zapytanie na stackoverflow - może ktoś znajdzie chwilę i jakoś pomoże: https://stackoverflow.com/questions/45586104/django-migrate-database-from-sqlite-to-mysql

Cytuj
Jak masz duże problemy z MySQL to możesz do nauki użyć początkowo bazy SQLite dostarczanej z Django.
Chciałbym przejść na mysql lub postgresql bo powoli zbliżam się do planów wrzucenia aplikacji na serwer i jej uruchomienia w normalnym środowisku. Muszę jakoś ogarnąć "prawdziwą" bazę, ale jak zwykle wszystko idzie pod górkę...
Zapisane
« Odpowiedz #3 : 22:20 09/08/17 »
DJangoL Offline
Advanced Python User

Zobacz profil
**

Reputacja: 19
Wiadomości: 247


Nie mam pojęcia co oznacza ten błąd Smutny Możesz spróbować zamiast:

pip install mysqlclient
dać:
pip install MySQL-python

Szanse, że pomoże są bardzo niewielkie, ale spróbować można.

Ja miałem problemy z wystartowaniem serwera MySQL WB, ale pomógł mi wpis na SO, gdzie było dokładne rozwiązanie.

Tu są pewne rozwiązania (być może) Twojego problemu:
https://stackoverflow.com/questions/29861346/django-migration-table-does-not-exist
Zapisane
« Odpowiedz #4 : 00:11 10/08/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 286


Cytuj
pip install MySQL-python
To nie obsługuje pythona3...

Kurcze - nie mam pojęcia jak się do tego zabrać. Znalazłem coś takiego https://github.com/jazzband/django-constance/issues/229 - wydaje się, że mój problem jest tożsamy, ale nic nie działa...
Zapisane
« Odpowiedz #5 : 11:22 10/08/17 »
DJangoL Offline
Advanced Python User

Zobacz profil
**

Reputacja: 19
Wiadomości: 247


Patrzyłeś na ostatni link który podałem (Stack Overflow)? Jak to nie pomoże to zobacz wątki pokrewne. Generalnie na SO większość problemów jest rozwiązana.
Zapisane
« Odpowiedz #6 : 14:37 10/08/17 »
raydeal Offline
Professional Python User

Zobacz profil
***

Reputacja: 55
Wiadomości: 316


Na github w podanym linku jest podane rozwiazanie - trzeba jeszcze raz zainstalowac z master branch'a.

Zawsze można pozostać przy SQLite nawet na serwerze, większość serwerów ma go zainstalowanego albo można samemu doinstalować. Jeśli aplikacja jest mała i nie przybywa danych szybko to czasem nie ma sensu się męczyć z MySQLem czy Postgresem. Ja tak mam dwie małe apki dla siebie zrobione. Zaletą jest to że jak chce mieć aktualną baze danych lokalnie na kompie to kopiuje z serwera tylko jeden plik. Nie musze się bawić tak jak w MySQL czy Postgres w backup bazy, sciąganie pliku a potem jej przywracanie lokalnie. SQLite jest daje rade w wielu sytuacjach.
Zapisane
« Odpowiedz #7 : 16:03 10/08/17 »
DJangoL Offline
Advanced Python User

Zobacz profil
**

Reputacja: 19
Wiadomości: 247


Dokładnie tak jak raydeal pisze, SQLite do małych stron (czy większych z małym ruchem) wystarczy, do nauki też jest w zupełności wystarczający. Problemem może być jedynie w przyszłości wymiana bazy.

Tu jest info kiedy go używać a kiedy nie:

https://stackoverflow.com/questions/913067/sqlite-as-a-production-database-for-a-low-traffic-site

https://sqlite.org/whentouse.html

Zapisane
« Odpowiedz #8 : 21:43 10/08/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 286


Cytuj
Patrzyłeś na ostatni link który podałem (Stack Overflow)? Jak to nie pomoże to zobacz wątki pokrewne. Generalnie na SO większość problemów jest rozwiązana.
Na link patrzyłem, na inne również. Nie mogę znaleźć rozwiązania, bo to problem związany z django-constance. Na githubie tej wtyczki są wzmianki o podobnych problemach, nawet są łatki, które jednak u mnie nie chcą działać...

Cytuj
Na github w podanym linku jest podane rozwiazanie - trzeba jeszcze raz zainstalowac z master branch'a.
Z różnic widzę jedynie backends/database/init.py . Zamieniłem ten plik u siebie i niestety dalej wywala ten sam błąd.

Cytuj
Jeśli aplikacja jest mała i nie przybywa danych szybko to czasem nie ma sensu się męczyć z MySQLem czy Postgresem.
Przełączając na mysqla myślałem po pierwsze o nauce. Po drugie nie wiem jak faktycznie będzie się zachowywała taka baza przy jej przyroście. Docelowo aplikacja może obsługiwać około 10000 rekordów (tak zakładam z doświadczenia podobnych stron, które mam na innym skrypcie). Nie wiem czy ktoś z forumowiczów ma doświadczenie z katalogami stron, ale usiłuję stworzyć własny skrypt katalogu, czyli baza będzie się rozrastała w miarę dodawania kolejnych wpisów. Katalogi, które obecnie posiadam działają na mysqlu.

Na docelowym serwerze strona działa już na sqlite, ale jak to się będzie zachowywało z czasem nie jestem w stanie przewidzieć. Chciałbym mieć możliwość przejścia na inną bazę, ale pojawił się opisywany problem.

Cytuj
Problemem może być jedynie w przyszłości wymiana bazy.
Dlatego chciałbym się nauczyć jak ewentualnie w przyszłości zmienić/rozwinąć aplikację w oparciu o inne bazy.

Cytuj
Tu jest info kiedy go używać a kiedy nie:
W zasadzie wychodzi, że mogę startować z sqlite, ale cały czas mam jakieś wątpliwości.

Dla zobrazowania co tworzę to podaję link do podobnej strony: http://www.wzrost.net . Chodzi mi o sam skrypt - staram się napisać coś odpowiadającego moim wymaganiom. Przy okazji uczę się Pythona, Django, javascriptu - jednym słowem uczę się wszystkiego tworząc prawdziwy projekt. Całkiem fajne wyzwanie, sprawiające masę frajdy. Na sqlite wszystko (prawie) działa - można powiedzieć, że niedługo będę się zabierał do startowania z pierwszym katalogiem w oparciu o moje kodowanie. Tylko nie wiem co robić z tą bazą.
Zapisane
« Odpowiedz #9 : 08:50 11/08/17 »
DJangoL Offline
Advanced Python User

Zobacz profil
**

Reputacja: 19
Wiadomości: 247


Katalog do nauki to może być dobra rzecz, ale jeśli chodzi o SEO, to słyszałem, że katalogi (tak jak precle czy SWL-e) prawie zupełnie straciły na znaczeniu w Google.
Nie znam się na pozycjonowaniu, ale takie rzeczy w kilku miejscach wyczytałem. Poza tym, żeby sam katalog miał wysoką "moc" (trust rank, page rank,...) też trzeba się napracować - czy warto?
Zapisane
« Odpowiedz #10 : 22:04 11/08/17 »
jundymek Offline
Advanced Python User

Zobacz profil
**

Reputacja: 3
Wiadomości: 286


Cytuj
słyszałem, że katalogi (tak jak precle czy SWL-e) prawie zupełnie straciły na znaczeniu w Google.

Na pewno nie mają takiej siły jak kiedyś, ale czy zupełnie to kwestia dyskusyjna. SEO to dosyć złożona sprawa. Nie znam katalogu napisanego w Django. To co staram się napisać ma przede wszystkim ułatwić utrzymanie katalogu w formie pozbawionej śmieci. W tej chwili jest tak, że masz katalog, który ma załóżmy 5 tysięcy wpisów, z czego 3 tysiące może posiadać linki do zupełnie innych stron niż akceptowanych pierwotnie przez moderatora, bądź do stron niedziałających, wygasłych domen. Chciałem zrobić coś co automatycznie będzie wychwytywało takie przypadki. Wydaje mi się, że jestem na dobrej drodze. Zobaczymy za jakiś czas czy coś z tego wyjdzie sensownego. Pytanie jest tylko czy sqlite dla katalogu stron to wystarczające rozwiązanie?
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2017 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot