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 を使用することが理にかなっているのかどうか疑問に思うようになりました。MySQLdb を使用して Python で直接クエリを実行する代わりに、ORM を使用する利点は何ですか?
これは私がやろうとしていることです:
-さまざまな Web サーバーからデータを自動的にダウンロードします。ほとんどのデータは xls または csv 形式です。xlrd パッケージを使用して xls を csv に変換できます。
-mysql db テーブルに挿入/一括挿入する前に、リスト オブジェクト内のデータを解析/処理します。
-複雑なクエリを実行して、mysql から python にデータを適切な構造化データ (リストなど) にエクスポートし、mysql ではなく python で実行する方が簡単なさまざまな統計計算を行います。mysql で実行できることはすべてそこで実行されますが、python で複雑な回帰を実行する場合があります。
-クエリから取得したデータに対してさまざまなグラフィカル パッケージを実行します。これには、高度なグラフィカル パッケージである ggplot2 パッケージ (R プロジェクトから) の使用が含まれる場合があります。そこで、R/Python の統合をいくつか行います。
上記を考えると、ORM/Peewee/SQLAlchemy を学ぶためにハッキングに時間を費やすか、MySQLdb を使用して直接 mysql クエリに固執するのが最善ですか?