小编gwi*_*rob的帖子

在SQLAlchemy中从集合中删除对象

我将一堆专利数据存储在MySQL数据库中,并通过SQLAlchemy与它进行交互.我在专利类中有一个代表受让人名单(被指定专利的公司)的集合:

assignees = relationship('Company', secondary=patent_company_table, backref='patents')
Run Code Online (Sandbox Code Playgroud)

我正在处理存储在数据库中的一些对象,对于专利对象p,我想ap收件人列表中删除一些受让人(公司对象).基于http://docs.sqlalchemy.org/en/latest/orm/session.html#deleting-from-collections,似乎调用s.delete(a)实际上将删除Company对象a.我只是想从受让人a列表中删除受让人p(即删除patent_company_table中的一行),而不是实际删除Company对象,因为a可能在另一个Patent对象的受让人列表中.

我试图创建一个新的名单new_assignees只包括从受让人pa然后叫:

p.assignees = new_assignees
s.add(p)
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这实际上并没有标记p为脏,所以我认为它不会影响数据库.

您对如何从集合中删除对象有任何建议,删除patent_company_table中的行而不是从Company表中删除对象?

谢谢.

UPDATE

以下是代码片段:

assignees = patent.assignees
for assignee in assignees:
    if assignee in duplicate_company_to_default:
        patent.assignees.remove(assignee)
        default_company = duplicate_company_to_default[assignee]
        if default_company not in assignees:
            added_patent_count += 1
            patent.assignees.append(default_company)
Run Code Online (Sandbox Code Playgroud)

循环完所有专利后,added_patent_count = 983672但没有任何对象session.dirty().通过append或修改后,是否需要手动添加到会话中remove

python mysql sqlalchemy

3
推荐指数
2
解决办法
5891
查看次数

Postgres 跨两列的唯一约束?

这是我当前的数据库结构:

Col1   Col2
 1    abc123
 1    abc123
 1    def321
 2    xyz789
 2    xyz789
Run Code Online (Sandbox Code Playgroud)

我想确保 中的任何条目Col2仅用于 中的相同条目Col1。例如,数据库允许您添加这一行:

Col1   Col2
 2    lmn456
Run Code Online (Sandbox Code Playgroud)

但不是这个:

Col1   Col2
 2    abc123
Run Code Online (Sandbox Code Playgroud)

有没有办法通过唯一索引来强制执行此操作?通常,唯一性强制特定组合对于整个表来说是唯一的(即(1,abc123)仅出现一次)。

我无法移动Col2到不同的表并使用联接,因为我需要支持Col2每个条目的多个值Col1- 它不是一对一的。

sql postgresql unique-index unique-constraint

2
推荐指数
1
解决办法
4235
查看次数