我正在尝试学习如何将 peewee 与 mysql 一起使用。
我在 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 每次我想与数据库交互时都必须创建一个表。这就是我认为错误所在。
查询的结果应该是空的,因为表是空的,但因为我正在学习,所以我只想尝试一下代码。我感谢您的帮助。
EDIT
根据 Wooble 和 Francis 的有用回复,我开始怀疑使用 peewee 或其他 ORM(如 sqlalchemy)是否有意义。使用 ORM 而不是使用 MySQLdb 在 python 中直接运行查询有什么好处?
这就是我期望做的事情:
-自动从各种网络服务器下载数据。大多数数据都是 xls 或 csv 格式。我可以使用 xlrd 包将 xls 转换为 csv。
- 在插入/批量插入 mysql 数据库表之前解析/处理列表对象中的数据。
-运行复杂的查询将数据从 mysql 导出到 python 中,形成适当的数据结构(例如列表),以进行各种统计计算,这在 python 而不是 mysql 中更容易完成。任何可以在 mysql 中完成的事情都会在那里完成,但我可能会在 python 中运行复杂的回归。
- 对从查询中检索到的数据运行各种图形包。其中一些可能包括使用 ggplot2 包(来自 R-project),这是一个高级图形包。所以我会涉及一些 R/Python 集成。
鉴于上述情况,我最好是花时间学习 ORM/Peewee/SQLAlchemy 还是坚持使用 MySQLdb 直接进行 mysql 查询?