Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中更多面向对象的sql_Python_Sql_Object Oriented Database - Fatal编程技术网

python中更多面向对象的sql

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

我正在考虑将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 = ?"
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的非常相似。