gpt4 book ai didi

flask - 设置多对多sqlalchemy flask app sqlite db的插入顺序

转载 作者:行者123 更新时间:2023-12-03 16:23:35 29 4
gpt4 key购买 nike

我的目标
我想在将数据插入到我的表中时记录许多的顺序(例如 Clump-见下表)。
orderinglist 模块真的很棒,但我如何将它应用到我的多对多之间的中间表(名为 clump_syntaxs)?有人以前做过这个并且有一个很好的例子吗?

问题重述
我如何在插入时应用排序到我的多对多。
我尝试使用中间表-clump_syntaxs 表的所有操作都崩溃了(对不起,奇怪的名字!)。

以下代码(为简洁起见进行了缩减)有效!除了它只允许一个语法有一个唯一的位置(而不是每个 Clump 实例的位置),我猜我需要位置变量在 clump_syntaxs 表上。
所有表都是 sqlite

我的中间表

from sqlalchemy.ext.orderinglist import ordering_list
clump_syntaxs = db.Table('clump_syntaxs',
db.Column('syntax_id', db.Integer, db.ForeignKey('syntax.id')),
db.Column('clump_id', db.Integer, db.ForeignKey('clump.id')),
)

添加簇和顺序语法表

class Clump(db.Model):
id = db.Column(db.Integer, primary_key=True)
syntaxs = db.relationship('Syntax', secondary=clump_syntaxs,
backref=db.backref('clumps', lazy='dynamic'),order_by="Syntax.position",
collection_class=ordering_list('position'))

class Syntax(db.Model):
id = db.Column(db.Integer, primary_key=True)
jobs = db.relationship('Jobs',lazy='dynamic', backref='jobhistory')
position = db.Column(db.Integer)
#Jobs table not included

最佳答案

是的,你应该将position字段移动到中间表ClumpSyntax,并利用Clump<中的association_proxy()/表。

import sqlalchemy.ext.associationproxy import association_proxy

class Syntax(db.Model):
id = db.Column(db.Integer, primary_key=True)
jobs = db.relationship('Jobs',lazy='dynamic', backref='jobhistory')
#position = db.Column(db.Integer) # moved to ClumpSyntax
#Jobs table not included

class ClumpSyntax(db.Model):
syntax_id = db.Column('syntax_id', db.Integer, db.ForeignKey('syntax.id'))
syntax = relationship(Syntax)
clump_id = db.Column('clump_id', db.Integer, db.ForeignKey('clump.id'))
position = db.Column(db.Integer)

# this constructor is very necessary !
def __init__(self, syntax =None):
self.syntax = syntax

class Clump(db.Model):
id = db.Column(db.Integer, primary_key=True)

_syntaxs = db.relationship('ClumpSyntax',
order_by=[ClumpSyntax.position],
collection_class=ordering_list('position'))
syntaxs = association_proxy('_syntaxs','syntax')

基于文章this,我的类似请求通过这种方式得到了很好的满足。和 this .您可以通过如下代码对其进行测试:

    session= some_code_to_get_db_session()
syn1= Syntax()
syn2= Syntax()
syn3= Syntax()
session.add(syn1)
session.add(syn2)
session.add(syn3)

clump= Clump()
session.add(clump)

clump.syntaxs.append(syn1)
clump.syntaxs.append(syn2)
clump.syntaxs.append(syn3)

session.commit()

session.query(ClumpSyntax).count() # print out 3
session.query(Syntax).count() # print out 3

关于flask - 设置多对多sqlalchemy flask app sqlite db的插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480581/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com