Próbuję nauczyć się używać peewee z mysql.Dlaczego peewee zawiera kolumnę 'id' w zapytaniu mysql select?
Mam istniejącą bazę danych na serwerze mysql z istniejącą tabelą. Tabela jest obecnie pusta (właśnie testuję teraz).
>>> db = MySQLDatabase('nhl', user='root', passwd='blahblah')
>>> db.connect()
>>> class schedule(Model):
... date = DateField()
... team = CharField()
... class Meta:
... database = db
>>> test = schedule.select()
>>> test
<class '__main__.schedule'> SELECT t1.`id`, t1.`date`, t1.`team` FROM `nhl` AS t1 []
>>> test.get()
pojawia się następujący błąd:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/peewee.py", line 1408, in get
return clone.execute().next()
File "/usr/lib/python2.6/site-packages/peewee.py", line 1437, in execute
self._qr = QueryResultWrapper(self.model_class, self._execute(), query_meta)
File "/usr/lib/python2.6/site-packages/peewee.py", line 1232, in _execute
return self.database.execute_sql(sql, params, self.require_commit)
File "/usr/lib/python2.6/site-packages/peewee.py", line 1602, in execute_sql
res = cursor.execute(sql, params or())
File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 201, in execute
self.errorhandler(self, exc, value)
File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 't1.id' in 'field list'")
Dlaczego peewee dodając 'id' kolumnę do kwerendy wybierającej? Nie mam kolumny id w tabeli, która już istnieje w bazie danych. Po prostu chcę pracować z istniejącą tabelą i nie polegać na tym, że peewee musi ją tworzyć za każdym razem, gdy chcę wejść w interakcję z bazą danych. Właśnie tam uważam, że błąd.
Wynik zapytania powinien być pusty, ponieważ tabela jest pusta, ale ponieważ się uczę, chciałem tylko wypróbować kod. Doceniam twoją pomoc.
EDIT
podstawie pomocnych odpowiedzi przez Wooble i Franciszka I przychodzą się zastanawiać, czy to jeszcze ma sens dla mnie do korzystania peewee lub innego podobnego SQLAlchemy ORM. Jakie są zalety korzystania z ORM zamiast po prostu uruchamiać bezpośrednie zapytania w Pythonie używając MySQLdb?
To jest to, czego oczekuję, że robi:
zapewnia automatyczną pobierania danych z różnych serwerów internetowych. Większość danych jest w formacie xls lub csv. Mogę przekonwertować xls na csv przy użyciu pakietu xlrd.
-parsowanie/przetwarzanie danych w obiektach listy przed wstawieniem/wstawieniem masowym do tabeli mysql db.
- uruchamianie złożonych zapytań do eksportu danych z mysql do Pythona na odpowiednie uporządkowane dane (na przykład listy) dla różnych obliczeń statystycznych, które są łatwiejsze do zrobienia w pythonie zamiast mysql. Wszystko, co można zrobić w mysql, zostanie wykonane, ale mogę uruchomić złożone regresje w pythonie.
-nowy różne pakiety graficzne na danych pobranych z zapytań. Niektóre z nich mogą obejmować użycie pakietu ggplot2 (z projektu R), który jest zaawansowanym pakietem graficznym. Więc włączę integrację R/Pythona.
Biorąc pod uwagę powyższe - czy najlepiej spędzam godziny na hakowaniu, aby nauczyć się ORM/Peewee/SQLAlchemy lub trzymać się bezpośrednich zapytań mysql przy użyciu MySQLdb?
Dziękuję za szczegółową odpowiedź. Jak się okazuje, istniejąca tabela w bazie danych ma KLAWISZ PODSTAWOWY (data). Czy muszę używać pwiz, jak wskazał Wooble, aby dostarczyć te informacje do podglądu? Doceń pomoc. – codingknob
Nie potrzebujesz * do - pwiz to tylko generator kodu i nic nie możesz zrobić sam.Prawdopodobnie po prostu dołącz argument "primary_key = True", jak wyjaśniono [w dokumentach opisujących niecałkowite klucze podstawowe] (http://peewee.readthedocs.org/en/latest/peewee/models.html#non-integer-primary-keys). –
Badam SQLAlchemy, ponieważ peewee nie zrobi tego, co chcę w przyszłości. – codingknob