使用sql语句操作django数据库:
- 导入包、类
Poet
- 使用sql语句:
Poet.objects.raw('select * from item_poet')
: 使用Poet.objects
获得一个管路类对象调用raw
方法,注意sql语句中数据表是数据库中的表名,而不再是类名。 raw
方法返回一个RawQuerrySet
集合,可以使用下标获得Poet
对象如:Poet.objects.raw('select * from item_poet')[0]
获得<Poet: 李白>
。
管理查询注意使用一方查询多方,否则会报错。如Poet
对应多个Item
,此时只能使用Poet.objects.filter(id=F('item__ipeo_id'))
来查询获得Poet
对象,而不能反过来利用Item
获得Item
对象
多对多关系:
- 定义字段定义在哪?一般来说,拥有ManytoMAny字段的类在创建时比较方便,在创建该类时可以选择另一类的实例,但对应来说,一般会用另一类查询。为了操作方便会定义在创建方便的类方,查询时使用类set方法查询。如:一个文章
Artical
对应多个标签Tag
,一个标签也对应多个文章;查询时通常查询一个Tag
下有多少个文章Artical
,但我们会把ManyToMany
定义在Artical
中,这样文章有了Tag
字段就可以在创建文章时选择标签,而不是在创建标签时选择文章。另一个类时,可以使用t = Tag(...), t.save(), t.artical_set.add(int_articalid,...)
来查询添加。**查询时,使用t.artical_set.all()
**方法。