我正在尝试学习如何在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
<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和Francis的有益回答,我开始思考是否使用peewee或类似于sqlalchemy的ORM甚至有意义。使用ORM而不是仅使用MySQLdb在Python中运行直接查询的好处是什么?
这是我期望做的事情:
- 从各种Web服务器自动下载数据。大多数数据都以xls或csv格式提供。我可以使用xlrd包将xls转换为csv。 - 在插入/批量插入到mysql db表之前,在列表对象中解析/处理数据。 - 运行复杂的查询,将数据从mysql导出到python中,以适当的数据结构(例如,列表)进行各种统计计算,在python中更容易进行而不是在mysql中。任何可以在mysql中完成的都将在那里完成,但我可能会在python中运行复杂的回归分析。 - 运行各种图形包以对从查询检索的数据进行操作。其中一些可能包括使用R-project的ggplot2软件包,这是一个高级图形软件包。因此,我将涉及一些R / Python集成。
考虑到上述情况,最好花费几个小时来学习ORM/Peewee/SQLAlchemy还是坚持使用MySQLdb进行直接mysql查询?
primary_key=True
参数即可。 - Francis Avila