flask sqlalchemy:如何在多对多关系中多次插入重复记录

flask sqlalchemy:如何在多对多关系中多次插入重复记录,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,我正在使用flask sqlalchemy并尝试在多对多关系中插入重复记录。但是,只能插入一项。例如,考虑下面的代码: db = SQLAlchemy(app) call_global_variable = db.Table('call_global_variable', db.Column('call_id', db.Integer, db.ForeignKey('call.id')), db.Column('global_variable_id', db.Integer, d

我正在使用flask sqlalchemy并尝试在多对多关系中插入重复记录。但是,只能插入一项。例如,考虑下面的代码:

db = SQLAlchemy(app)
call_global_variable = db.Table('call_global_variable',
    db.Column('call_id', db.Integer, db.ForeignKey('call.id')),
    db.Column('global_variable_id', db.Integer, db.ForeignKey('global_variable.id'))
)
class Call(db.Model):
    __tablename__           = 'call'
    id                      = db.Column(db.Integer, primary_key = True)

    callee_id               = db.Column(db.Integer, db.ForeignKey('function.id'))
    callee                  = db.relationship('Function', foreign_keys = [callee_id])
    arg_list                = db.relationship('GlobalVariable', secondary = call_global_variable, lazy = 'dynamic')

class Function(db.Model):
    __tablename__           = 'function'
    id                      = db.Column(db.Integer, primary_key = True)
    name                    = db.Column(db.String(20))
    type                    = db.Column(db.String(20))
    def __repr__(self):
        return self.name

class GlobalVariable(db.Model):
    __tablename__           = 'global_variable'
    id                      = db.Column(db.Integer, primary_key = True)
    name                    = db.Column(db.String(20))
    type                    = db.Column(db.String(20))
    def __repr__(self):
        return self.name

func = Function(name = 'func', type = 'void')
gvar0 = GlobalVariable(name = 'a', type = 'int')
gvar1 = GlobalVariable(name = 'b', type = 'int')
call = Call(callee = func, arg_list = [gvar0, gvar0, gvar0, gvar0, gvar1])
db.session.add_all([func, gvar0, gvar1, call])
db.session.commit()
print len(list(call.arg_list))

现在我想存储调用站点
func(a,a,a,a,b)
其中
func
是一些函数,
a
b
是全局变量。因此,我希望
call.arg_list
包含4个重复的
gvar0
(对于
a
),因为
a
发生4次。但是,
len(list(call.arg_list))
的结果是2。我猜原因可能是sqlalchemy删除了重复的
gvar0
。因此,我的问题是如何声明
Call
GlobalVariable
的模型以及表
Call\u global\u variable
,以便我可以将多个重复记录(例如
gvar0
)插入多对多关系
Call.arg\u list
?谢谢

为什么需要这样做?@univerio每个
用户
都应该填写10个
地址
-es。如果
用户
只有一个地址,则其余9个
地址
应填写相同的地址,以便在修改某些
地址.name
时,也会修改其余地址。一种直观的方法是复制
地址
。然而,炼金术不允许这样的复制。出于您的目的,如果使用只有一个地址,您只能保存一次地址。我认为这不是直观的。为什么需要数据库正好包含10个地址?你不能。表是集合,而不是列表。您需要将一列添加到名为
call\u global\u variable
arg\u pos
并手动管理它。