python能查询MySQL视图_PeeWee是否支持与MySQL视图的交互?

当我尝试的时候,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)

好吧没什么刺激的,只是把三个名字放进一个表里。然后我做了一个与名称的大写转换相对应的视图:

^{pr2}$

然后我尝试了以下方法,但失败了: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']

希望有帮助。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值