私はデータベース経由で事前作成されたMySQLビューにアクセスしようとしています。 peeweeはそれをテーブルとして扱います[peewee.model]、しかし、私はまだOperational Error 1054 unknownカラムが表示されます。PeeWeeはMySQLビューとの対話をサポートしていますか?
PeeWeeはデータベースビューとのやりとりをサポートしていますか?
私はデータベース経由で事前作成されたMySQLビューにアクセスしようとしています。 peeweeはそれをテーブルとして扱います[peewee.model]、しかし、私はまだOperational Error 1054 unknownカラムが表示されます。PeeWeeはMySQLビューとの対話をサポートしていますか?
PeeWeeはデータベースビューとのやりとりをサポートしていますか?
Peeweeは私が試したときにビューに対して照会することができましたが、簡単な概念実証を打ち込む間に私は2つの潜在的な問題に遭遇しました。
まず、コード:
from peewee import *
db = SqliteDatabase(':memory:')
class Foo(Model):
name = TextField()
class Meta: database = db
db.create_tables([Foo])
for name in ('huey', 'mickey', 'zaizee'):
Foo.create(name=name)
OK - テーブルへのエキサイティングな何も、ちょうどロードされた3人の名前。その後、私は名前の大文字変換に対応するビューを作った:
class FooView(Foo):
class Meta:
db_table = 'foo_view'
print [fv.name for fv in FooView.select()]
を、私は最初の問題に遭遇:
db.execute_sql('CREATE VIEW foo_view AS SELECT UPPER(name) FROM foo')
私が失敗した以下を試みました。
"Foo"をサブクラス化したとき、私は "id"という名前のプライマリキー列を持ってきました。私は裸のselect()
(FooView.select()
)を使用していたので、peeweeは私が "id"と "name"の両方をwasntedと仮定しました。ビューには「id」がないため、エラーが発生しました。
私は名前だけを指定して、もう一度試してみました:
print [fv.name for fv in FooView.select(FooView.name)]
これも失敗しました。
この2番目のクエリが失敗した理由は、裸の上のカーソルの記述を見て、見つけることができます選択します。
curs = db.execute_sql('select * from foo_view')
print curs.description[0][0] # Print the first column's name.
# prints UPPER(name)
SQLiteは、ビューの列の「UPPER(名前)」と命名。この問題を解決するために、私は、ビューを再定義:
db.execute_sql('CREATE VIEW foo_view AS SELECT UPPER(name) AS name FROM foo')
さて、私はビューを照会すると、それだけで正常に動作します:
print [x.name for x in FooView.select(FooView.name)]
# prints ['HUEY', 'MICKEY', 'ZAIZEE']
希望を助けています。