Dlaczego peewee zawiera kolumnę „id” w kwerendzie wyboru mysql?

Próbuję nauczyć się używać peewee z mysql.

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()

Otrzymuję 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 dodaje kolumnę „id” do zapytania wyboru? 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ę korzystać z bazy danych. Tu uważam, że błąd jest.

Wynik zapytania powinien być pusty, ponieważ tabela jest pusta, ale ponieważ uczę się, chciałem wypróbować kod. Doceniam twoją pomoc.

EDYTOWAĆ

Opierając się na pomocnych odpowiedziach Wooble i Francisa, zastanawiam się, czy ma sens używanie peewee lub innego ORM jak sqlalchemy. Jakie są zalety korzystania z ORM zamiast uruchamiania bezpośrednich zapytań w pythonie przy użyciu MySQLdb?

Tego właśnie oczekuję:

-automatycznie pobierać dane z różnych serwerów internetowych. Większość danych jest w formacie xls lub csv. Mogę przekonwertować xls do csv za pomocą pakietu xlrd.

-parsowanie / przetwarzanie danych w obiektach listy przed wstawieniem / wstawieniem zbiorczym do tabeli db mysql.

- uruchamianie złożonych zapytań w celu wyeksportowania danych z mysql do pythona w odpowiednie strukturyzowane dane (na przykład listy) dla różnych obliczeń statystycznych, które są łatwiejsze do wykonania w pythonie zamiast mysql. Wszystko, co można zrobić w mysql, zostanie tam zrobione, ale mogę uruchomić złożone regresje w Pythonie.

-wyruchom 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. Będę się więc angażował w integrację R / Python.

Biorąc powyższe pod uwagę - czy najlepiej jest spędzać godziny hackując się, aby uczyć się ORM / Peewee / SQLAlchemy lub trzymać się poleceń mysql przy użyciu MySQLdb?

questionAnswers(4)

yourAnswerToTheQuestion