PeeWee 是否支持与 MySQL 视图交互?
Does PeeWee support interaction with MySQL Views?
我正在尝试通过访问预先创建的 MySQL 数据库中的视图。 peewee 将其视为 table [peewee.model],但是我仍然收到操作错误 1054 未知列的提示。
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)
好的 - 没什么好兴奋的,只是将三个名字加载到 table 中。然后我做了一个对应名字大写转换的视图:
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)]
这也失败了。
第二个查询失败的原因可以通过查看游标描述找到 select:
curs = db.execute_sql('select * from foo_view')
print curs.description[0][0] # Print the first column's name.
# prints UPPER(name)
SQLite 将视图的列命名为 "UPPER(name)"。为了解决这个问题,我重新定义了视图:
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']
希望对您有所帮助。
我正在尝试通过访问预先创建的 MySQL 数据库中的视图。 peewee 将其视为 table [peewee.model],但是我仍然收到操作错误 1054 未知列的提示。
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)
好的 - 没什么好兴奋的,只是将三个名字加载到 table 中。然后我做了一个对应名字大写转换的视图:
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)]
这也失败了。
第二个查询失败的原因可以通过查看游标描述找到 select:
curs = db.execute_sql('select * from foo_view')
print curs.description[0][0] # Print the first column's name.
# prints UPPER(name)
SQLite 将视图的列命名为 "UPPER(name)"。为了解决这个问题,我重新定义了视图:
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']
希望对您有所帮助。