有没有一种非Sqlalchemy的方法来处理Python中的多对多关系?
我在web上搜索了相当长的一段时间,寻找一种在python sqlite3中处理多对多关系的方法,但所有这些似乎都导致了Sqlalchemy。我一点也不反对使用sqlalchemy(尽管我确实有时会觉得它有点过分,而且在很多情况下它会引入一些不必要的逻辑),我想知道是否有一个“黄金类/函数”可以直接提供基本的CRUD接口而不影响sqlalchemy?任何参考(在线或纸质)都将不胜感激。如果您想在基本SQL中解决多对多关系,您可以使用第三个表手动存储这些关系有没有一种非Sqlalchemy的方法来处理Python中的多对多关系?,python,sqlite,database-design,sqlalchemy,many-to-many,Python,Sqlite,Database Design,Sqlalchemy,Many To Many,我在web上搜索了相当长的一段时间,寻找一种在python sqlite3中处理多对多关系的方法,但所有这些似乎都导致了Sqlalchemy。我一点也不反对使用sqlalchemy(尽管我确实有时会觉得它有点过分,而且在很多情况下它会引入一些不必要的逻辑),我想知道是否有一个“黄金类/函数”可以直接提供基本的CRUD接口而不影响sqlalchemy?任何参考(在线或纸质)都将不胜感激。如果您想在基本SQL中解决多对多关系,您可以使用第三个表手动存储这些关系 CREATE TABLE users
CREATE TABLE users {
int user_id,
varchar user_name
};
CREATE TABLE categories {
int category_id,
varchar category_name
};
CREATE TABLE category_permission {
int user_id,
int category_id
}; -- for storing relations
这三个表表示两个模型(用户
,类别
)和一个多对多关系(类别权限
)
您必须手动查询它们,还必须手动维护存储的关系。基于你正在使用的SQL引擎,你应该考虑使用< /P>
- 表类别中的唯一索引\u所有两个COLLMN上的权限
- 在删除某些内容时使用foring键来维护关系
-- to list all users and their category count
SELECT U.user_name, count(CP.category_id) as 'permitted'
FROM users U
LEFT JOIN category_permission PM
ON PM.user_id = U.user_id
ORDER BY permitted DESC;
-- to list all categories for __desired_user__
SELECT C.* FROM categories C
JOIN category_permission CM
ON CM.category_id = C.category_id
WHERE CM.user_id = __desired_user_id__;
如需进一步参考,请搜索SQL解决方案而不是Python(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题
- 。。。等等
CREATE TABLE users {
int user_id,
varchar user_name
};
CREATE TABLE categories {
int category_id,
varchar category_name
};
CREATE TABLE category_permission {
int user_id,
int category_id
}; -- for storing relations
这三个表表示两个模型(用户
,类别
)和一个多对多关系(类别权限
)
您必须手动查询它们,还必须手动维护存储的关系。基于你正在使用的SQL引擎,你应该考虑使用< /P>
- 表类别中的唯一索引\u所有两个COLLMN上的权限
- 在删除某些内容时使用foring键来维护关系
-- to list all users and their category count
SELECT U.user_name, count(CP.category_id) as 'permitted'
FROM users U
LEFT JOIN category_permission PM
ON PM.user_id = U.user_id
ORDER BY permitted DESC;
-- to list all categories for __desired_user__
SELECT C.* FROM categories C
JOIN category_permission CM
ON CM.category_id = C.category_id
WHERE CM.user_id = __desired_user_id__;
如需进一步参考,请搜索SQL解决方案而不是Python(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题
- 。。。等等
CREATE TABLE users {
int user_id,
varchar user_name
};
CREATE TABLE categories {
int category_id,
varchar category_name
};
CREATE TABLE category_permission {
int user_id,
int category_id
}; -- for storing relations
这三个表表示两个模型(用户
,类别
)和一个多对多关系(类别权限
)
您必须手动查询它们,还必须手动维护存储的关系。基于你正在使用的SQL引擎,你应该考虑使用< /P>
- 表类别中的唯一索引\u所有两个COLLMN上的权限
- 在删除某些内容时使用foring键来维护关系
-- to list all users and their category count
SELECT U.user_name, count(CP.category_id) as 'permitted'
FROM users U
LEFT JOIN category_permission PM
ON PM.user_id = U.user_id
ORDER BY permitted DESC;
-- to list all categories for __desired_user__
SELECT C.* FROM categories C
JOIN category_permission CM
ON CM.category_id = C.category_id
WHERE CM.user_id = __desired_user_id__;
如需进一步参考,请搜索SQL解决方案而不是Python(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题
- 。。。等等
CREATE TABLE users {
int user_id,
varchar user_name
};
CREATE TABLE categories {
int category_id,
varchar category_name
};
CREATE TABLE category_permission {
int user_id,
int category_id
}; -- for storing relations
这三个表表示两个模型(用户
,类别
)和一个多对多关系(类别权限
)
您必须手动查询它们,还必须手动维护存储的关系。基于你正在使用的SQL引擎,你应该考虑使用< /P>
- 表类别中的唯一索引\u所有两个COLLMN上的权限
- 在删除某些内容时使用foring键来维护关系
-- to list all users and their category count
SELECT U.user_name, count(CP.category_id) as 'permitted'
FROM users U
LEFT JOIN category_permission PM
ON PM.user_id = U.user_id
ORDER BY permitted DESC;
-- to list all categories for __desired_user__
SELECT C.* FROM categories C
JOIN category_permission CM
ON CM.category_id = C.category_id
WHERE CM.user_id = __desired_user_id__;
如需进一步参考,请搜索SQL解决方案而不是Python(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题
- 。。。等等
在我自己的例子中,我最终使用了SqlAlchemy,因为ORMs所需的机制非常庞大,我更愿意以低廉的价格获得更多的函数,而且当时对Python 3的支持并不那么普遍(我的两分钱:-)。如果您正在研究SqlAlchemy以外的其他ORMs,您可以比较这里提供的ORMs: 我个人尝试过几乎透明地支持多对多,但您必须编写SQL来创建表(IIRC) 我也试过秋天,它已经死了,但有一把叉子。它非常轻,但不支持多对多。您可能可以通过显式声明连接表来解决这个问题,并且它是针对sqlite的(请参见peewee) 我测试了dejavu(dead),它也没有透明的多对多,但解释了(你可以将同样的方法应用到AutORM)
在我自己的例子中,我最终使用了SqlAlchemy,因为ORMs所需的机制非常庞大,我更愿意以低廉的价格获得更多的函数,而且当时对Python 3的支持并不那么普遍(我的两分钱:-)。如果您正在研究SqlAlchemy以外的其他ORMs,您可以比较这里提供的ORMs: 我个人尝试过几乎透明地支持多对多,但您必须编写SQL来创建表(IIRC) 我也试过秋天的那种