我正在考虑将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
我现在在想的是如何实现排序,拥有和区别。不知道。也许你可以帮忙吗?
嗯,这些是我最初的原始想法。欢迎你的想法。你会怎么做?你会以不同的方式做什么?