0
我想通過數據庫訪問預先創建的MySQL視圖。 peewee把它當作桌子[peewee.model],但是我仍然提示Operational Error 1054 unknown列。PeeWee是否支持與MySQL視圖的交互?
PeeWee支持與數據庫視圖的交互嗎?
我想通過數據庫訪問預先創建的MySQL視圖。 peewee把它當作桌子[peewee.model],但是我仍然提示Operational Error 1054 unknown列。PeeWee是否支持與MySQL視圖的交互?
PeeWee支持與數據庫視圖的交互嗎?
Peewee在嘗試過時能夠查看視圖,但在輸入一個簡單的概念證明時,我遇到了兩個潛在的問題。
首先,代碼:
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 - 平平淡淡,只是裝了三個名字到一個表。然後我做了的名稱相對應的大寫轉換一個觀點:
db.execute_sql('CREATE VIEW foo_view AS SELECT UPPER(name) FROM foo')
我又試圖以下,其中失敗:
class FooView(Foo):
class Meta:
db_table = 'foo_view'
print [fv.name for fv in FooView.select()]
然後我跑進了第一個問題。
當我分類爲「Foo」時,我帶了一個名爲「id」的主鍵列。由於我使用了select()
(FooView.select()
),因此,peewee認爲我同時擁有「id」和「name」。由於該視圖沒有「ID」,我得到了一個錯誤。
我又試了一次,僅指定名稱:
print [fv.name for fv in FooView.select(FooView.name)]
這也失敗了。
第二次查詢失敗原因可以通過裸選擇看光標描述中找到:
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']
希望有所幫助。