0

我正在考虑将 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

比较部分很简单。我们可以轻松地模拟 <、<=、>、>=、==、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

我现在在想的是如何实现排序、拥有和区分。还不知道。也许你能帮忙?

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

4

0 回答 0