Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
有没有一种非Sqlalchemy的方法来处理Python中的多对多关系?_Python_Sqlite_Database Design_Sqlalchemy_Many To Many - Fatal编程技术网

有没有一种非Sqlalchemy的方法来处理Python中的多对多关系?

有没有一种非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

我在web上搜索了相当长的一段时间,寻找一种在python sqlite3中处理多对多关系的方法,但所有这些似乎都导致了Sqlalchemy。我一点也不反对使用sqlalchemy(尽管我确实有时会觉得它有点过分,而且在很多情况下它会引入一些不必要的逻辑),我想知道是否有一个“黄金类/函数”可以直接提供基本的CRUD接口而不影响sqlalchemy?任何参考(在线或纸质)都将不胜感激。

如果您想在基本SQL中解决多对多关系,您可以使用第三个表手动存储这些关系

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(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题

  • 。。。等等

如果您想在基本SQL中解决多对多关系,可以使用第三个表来存储这些关系

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(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题

  • 。。。等等

如果您想在基本SQL中解决多对多关系,可以使用第三个表来存储这些关系

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(这将始终引导您找到某个框架)。多对多关系是关系数据库中的一个常见问题

  • 。。。等等

如果您想在基本SQL中解决多对多关系,可以使用第三个表来存储这些关系

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以外的其他ORM,您可以比较此处提供的ORM:

我个人尝试过几乎透明地支持多对多,但您必须编写SQL来创建表(IIRC)

我也试过秋天,它已经死了,但有一把叉子。它非常轻,但不支持多对多。您可能可以通过显式声明连接表来解决这个问题,并且它是针对sqlite的(请参见peewee)

我测试了dejavu(dead),它也没有透明的多对多,但解释了(你可以将同样的方法应用到AutORM)


在我自己的例子中,我最终使用了SqlAlchemy,因为ORMs所需的机制非常庞大,我更愿意以低廉的价格获得更多的函数,而且当时对Python 3的支持并不那么普遍(我的两分钱:-)。

如果您正在研究SqlAlchemy以外的其他ORMs,您可以比较这里提供的ORMs:

我个人尝试过几乎透明地支持多对多,但您必须编写SQL来创建表(IIRC)

我也试过秋天,它已经死了,但有一把叉子。它非常轻,但不支持多对多。您可能可以通过显式声明连接表来解决这个问题,并且它是针对sqlite的(请参见peewee)

我测试了dejavu(dead),它也没有透明的多对多,但解释了(你可以将同样的方法应用到AutORM)


在我自己的例子中,我最终使用了SqlAlchemy,因为ORMs所需的机制非常庞大,我更愿意以低廉的价格获得更多的函数,而且当时对Python 3的支持并不那么普遍(我的两分钱:-)。

如果您正在研究SqlAlchemy以外的其他ORMs,您可以比较这里提供的ORMs:

我个人尝试过几乎透明地支持多对多,但您必须编写SQL来创建表(IIRC)

我也试过秋天的那种