我正在尝试学习如何在mysql中使用peewee。
我在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
SELECT t1.`id`, t1.`date`, t1.`team` FROM `nhl` AS t1 []
>>> test.get()
我得到以下错误:Traceback (most recent call last):
File "", line 1, in
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”列添加到select查询中?表中没有数据库中已存在的id列。我只想使用现有的表,而不依赖于peewee每次与数据库交互时都必须创建一个表。这就是我认为错误的地方。
查询的结果应该是空的,因为表是空的,但由于我正在学习,我只是想尝试代码。谢谢你的帮助。
编辑
基于Wooble和Francis的回答,我开始怀疑使用peewee或其他类似于sqlalchemy的ORM是否有意义。使用ORM而不只是使用MySQLdb在python中运行直接查询有什么好处?
这就是我所期望的:
-自动从各种网络服务器下载数据。大多数数据是xls或csv格式的。我可以使用xlrd包将xls转换为csv。
-在向mysql db表中插入/大容量插入之前,分析/处理列表对象中的数据。
-运行复杂的查询,将mysql中的数据导出到python中,并将其转换为适当的数据结构(例如列表),以便进行各种统计计算,这在python中比mysql更容易实现。在mysql中可以做的任何事情都将在那里完成,但是我可以在python中运行复杂的回归。
-对从查询检索到的数据运行各种图形包。其中一些可能包括使用ggplot2软件包(来自R-project),这是一个高级图形软件包。所以我将涉及一些R/Python集成。
考虑到上述情况,我最好花几个小时学习ORM/Peewee/SQLAlchemy,还是坚持使用MySQLdb直接查询mysql?