python中更多面向对象的sql
我正在考虑将sql代码引入python对象,并使用数据模型提供的更多特殊方法。这是我的想法。你的意见是什么?你会怎么做 让我们定义一些表python中更多面向对象的sql,python,sql,object-oriented-database,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 use
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 = ?"
values_types = Values.db
for (value_type, value) in (value_types + values):
-> select * from value_types join values ...
但也许上面的构造过于复杂。也许我应该使用更简单的方法,比如:
for value in values.fields(values.value_type_id):
-> select value_type_id from values where user_id = ?"
如果我们希望获得ValueType对象以及返回的所有值,我将执行以下操作:
for value in values >> (values.value_type_id):
-> select value_type_id from values where user_id = ?"
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
比较部分很简单。我们可以很容易地在中模拟=、=。所有这些比较函数都将改变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
我现在想的是,如何实现有序、有序和独特。还不知道。也许你能帮忙
嗯,这是我最初的原始想法。欢迎你的想法。你会怎么做?有什么不同的做法吗?如果您想连接关系数据和对象,请查看SQLAlchemy。不要重新发明这个(相当复杂的)轮子。还要看看Django的ORM功能。这些可以很容易地在Django之外使用,并提供一个非常pythonic的数据库接口?我没用过,但我会看看。如果事情变得复杂,Django一点也不是pythonic。事实上,我试图在没有中间表的情况下创建多个关系,结果发现自己被卡住了,代码的一半是pythonic的,而另一半是字符串处理。Thanx用于wiki链接。现在检查一下,看看皮维。和django的非常相似。