def __unicode__(self):
return u'%s_%s' % (self.a1, self.a2)
class B:
b1 = Reference('a')
在B表的list中用query 可以搜索A的__unicode__輸出的值嗎?
或者
在B表的list中用query 可以搜索A表所有欄位的值嗎?
應該要注意哪些細節
感謝
目前ORM的一个Model主要是用来搜索这个Model下的数据,然后在遍历每条数据时,再去通过关系来获得对主应的数据。此时会引发另一条sql语句来获取。因此,如果你要同时获得A,B表的字段,需要使用sqlalchemy的select([fields],
where)来获得记录。
以后可以考虑以一种方便的形式来同时获取主表和关联表的记录,减少sql语句,但是通过増加连接处理。
--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://code.google.com/p/uliweb/
My Blog: http://hi.baidu.com/limodou
感謝
On Nov 14, 8:58 am, limodou <limo...@gmail.com> wrote:
> 2011/11/13 SeedSeek <frt524...@gmail.com>:
你可以直接使用上面的语句,对于uliorm来说,可以使用Model.c.field和sqlalchemy的table.c.field是一样的。另外Model.table就是sqlalchemy的table对象,比如上面,可以写为:
select([User.table])
这个是全部字段,也可以指定字段,如:
select([User.c.username, User.c.email])
不过,如果只是一个表的话,就没必要使用select了,可以使用:
User.all()或User.all().values(User.c.username, User.c.email),更ORM的用法。
以上兩個都沒辦法操作
請問這樣是不是寫錯了?
On Nov 28 2011, 9:23 am, limodou <limo...@gmail.com> wrote:
> 2011/11/28 SeedSeek <frt524...@gmail.com>:
>
> > select([fields], where)
> > 在Uliweb 要怎麼要怎麼寫?
>
> 你可以直接使用上面的语句,对于uliorm来说,可以使用Model.c.field和sqlalchemy的table.c.field是一样的。另外Mo del.table就是sqlalchemy的table对象,比如上面,可以写为:
select([User.c.username, User.c.email],
User.c.username.like('%'+c['username']+'%‘)
> select([User.c.username.like('%'+c['username']+'%'),
> User.c.email.like('%'+c['username']+'%')])
>
字段列表和条件在select中是两个参数。
什么意思?
範例字典檔
{username:'abc', email:'1...@gmail.com'}
{username:'cde', email:'4...@gmail.com'}
{username:'efg', email:'b...@gmail.com'}
當我查詢 'b' 的時候,只要username 或email 欄位中的值有 'b' 條件就成立
所以會查到
{username:'abc', email:'1...@gmail.com'}
{username:'efg', email:'b...@gmail.com'}
應該就這樣
範例字典檔
{username:'abc', email:'1gmailcom'}
{username:'cde', email:'2gmailcom'}
{username:'efg', email:'bgmailcom'}
當我查詢 'b' 的時候,只要username 或email 欄位中的值有 'b' 條件就成立
所以會查到
{username:'abc', email:'...@gmail.com'}
{username:'efg', email:'...@gmail.com'}
查詢 'a'
符合
{username:'abc', email:'1gmailcom'}
{username:'cde', email:'2gmailcom'}
{username:'efg', email:'bgmailcom'}
查詢 '1'
符合
{username:'abc', email:'1gmailcom'}
On Jan 6, 10:19 pm, SeedSeek <frt524...@gmail.com> wrote:
> 應該算是關鍵字搜尋
> 在欄位清單中的欄位內的值
> 只要有類似條件的值
> 這一筆就等於符合搜尋條件
>
> 範例字典檔
> {username:'abc', email:'...@gmail.com'}
> {username:'cde', email:'...@gmail.com'}
> {username:'efg', email:'...@gmail.com'}
>
> 當我查詢 'b' 的時候,只要username 或email 欄位中的值有 'b' 條件就成立
> 所以會查到
> {username:'abc', email:'...@gmail.com'}
> {username:'efg', email:'...@gmail.com'}
那这是一个或者的关系,可以这样
select([User.c.username, User.c.email],
User.c.username.like('%'+c['username']+'%') |
User.c.email.like('%'+c['username']+'%'))
还可以使用or_来处理或者的关系。
condition相当于where条件的,不能有select啊。所以上面应该是:
condition = None
condition = (User.c.username.like('%'+c['username']+'%') |
User.c.email.like('%'+c['username']+'%')) & condition
数字只有比较大小吧。字符串才有like。这是数据库的查询要求。
On Jan 8, 7:14 pm, limodou <limo...@gmail.com> wrote:
> 2012/1/8 SeedSeek <frt524...@gmail.com>:
如果要从D查到A还是比较简单,因为都是多对一的关系,所以假如D的对象是d,可以这样:
d.c.b.a
这样得到a
你要区分:实例.reference_field和Model.c.refernce_field是不同的概念。前者会引发一个查询,它是通过对象来查找对应的记录。而后者是一个字段,用来生成条件的。Reference是通过对象来关联的,不能直接通过field来关联,所以d.c.Package.Parts.Workpiece.Workpiece这样的用法是不对的。你要写成关联的形式,如:
(D.c.Package == C.c.id) & (C.c.Parts == B.c.id) & ...
所以你的写法condition和filter都是不对的。你可以print condition看一看生成的是什么东西就清楚了。