python中更多面向对象的sql

时间:2013-04-03 11:56:14

标签: python sql object-oriented-database

我正在考虑将sql代码引入python对象并使用数据模型提供的更多特殊方法。这是我的想法。你有什么意见?你会怎么做?

让我们定义一些表

table users
    id: int
    username: string
    group_id: int

table groups
    id: int
    name: string

table values:
    id: int
    value_type_id: int
    value: string
    user_id: int

table value_types:
    id: int
    name: int

并且假设我们在python中有适当的类,名为User,Group,Value,ValueType。

要获取特定用户的所有值,我会写:

values = Value.db
values.user.id == request["user_id"] 

或者如果没有指定外键

values.user_id == request["user_id"] 

从数据库中获取值,我会像其他人一样迭代:

for value in values:
-> select * from values where user_id = ?

如果我不想要所有列,我会在迭代之前指定列,如下所示:

for value in values >> (values.value_type_id):
-> select value_type_id from values where user_id = ?"

但也许上面的形成是过度的,太复杂了。也许我应该使用更简单的东西:

for value in values.fields(values.value_type_id):
-> select value_type_id from values where user_id = ?"

如果我们想获得ValueType对象以及返回的所有值,我会这样做:

values_types = Values.db
for (value_type, value) in (value_types + values):
-> select * from value_types join values ...

添加没有外键的连接,我需要单独指定连接条件,如下所示

 groups = Group.db
 values.user.group_id == groups.id
 for (value, group) in (values + groups):
 -> select users.*,groups.* from values join users join groups

比较部分很简单。我们可以轻松地模拟&lt ;,<,>,> =,==,in。所有这些比较函数都将改变db manager sql条件。

对于分组,我正在考虑使用这样的分区。你会用什么?

for value in values.fields(values.value_type_id) / values.value_type_id:
-> select value_type_id from values groupd by value_type_id

对于左连接,我会使用+ =。

for (value, group) in (values += groups):
 -> select users.*,groups.* from values join users left join groups

我现在在想的是如何实现排序,拥有和区别。不知道。也许你可以帮忙吗?

嗯,这些是我最初的原始想法。欢迎你的想法。你会怎么做?你会以不同的方式做什么?

0 个答案:

没有答案