我想學習如何使用mysql與peewee。爲什麼包含'id'列的peewee放入mysql select查詢中?
我有一個現有的數據庫與現有表的MySQL服務器。該表目前是空的(我現在只是測試)。
>>> 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()
我得到以下錯誤:
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'")
爲什麼peewee添加 'ID' 列到選擇查詢?數據庫中已存在的表中沒有id列。我只想使用現有的表格,而不是依賴於每次我想與數據庫進行交互的peewee都要創建一個。這是我相信錯誤的地方。
查詢的結果應該是空的,因爲表是空的,但由於我正在學習,我只是想嘗試一下代碼。我感謝您的幫助。
編輯
基於由Wooble和弗朗西斯很有幫助的回答,我來想知道是否甚至是有道理的,我使用peewee或其他類似ORM SQLAlchemy的。使用ORM而不是僅使用MySQLdb在python中運行直接查詢有什麼好處?
這是我希望做:
從各種web服務器 - 自動下載數據。大部分數據都是xls或csv格式。我可以使用xlrd軟件包將xls轉換爲csv。
- 在插入/批量插入到mysql數據庫表之前解析/處理列表對象中的數據。
- 運行復雜的查詢將數據從mysql導出到python中導入適當的數據結構化(列舉例如)各種統計計算,在python而不是mysql中更容易完成。任何可以在mysql中完成的事情都將在那裏完成,但我可能會在python中運行復雜的迴歸。
- 對從查詢中檢索到的數據運行各種圖形包。其中一些可能包括使用ggplot2軟件包(來自R-project),這是一個高級圖形軟件包。所以我會涉及一些R/Python集成。
鑑於上述情況,我最好花費幾個小時學習ORM/Peewee/SQLAlchemy或堅持使用MySQLdb直接進行mysql查詢?
謝謝你的詳細回覆。事實證明,數據庫中的現有表具有PRIMARY KEY(日期)。我是否需要按照Wooble的指示使用pwiz將這些信息提供給peewee?感謝幫助。 – codingknob 2013-03-22 01:11:19
你不需要* - pwiz只是一個代碼生成器,不會做你自己無法做的事情。可能只是包含'primary_key = True'參數[在描述非整數主鍵的文檔中](http://peewee.readthedocs.org/en/latest/peewee/models.html#non-integer-primary-keys )。 – 2013-03-22 01:35:14
我正在調查SQLAlchemy,因爲peewee將來不會做我想做的事情。 – codingknob 2013-03-27 01:19:54