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

切特·梅恩泽

我的目标
我想在向表中插入数据时记录多次的顺序(例如,请参见下面的表)。
orderinglist模块确实很棒,但是我如何将其应用于多对多之间的中间表(名为clump_syntaxs)?有人以前做过这个,有一个很好的例子吗?

问题已重述
如何在插入时对多对多应用排序。
我尝试使用中介表-clump_syntaxs表进行的所有操作均崩溃(对不起的名称!)。

以下代码(为简便起见,已简化)适用!除了它只允许语法具有唯一的位置(而不是每个Clump实例的位置),而且我猜我需要将position变量放在clump_syntaxs表上。
所有桌子都是方形的

我的中介表

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,并利用优势association_proxy()Clump表。

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')        

基于本文thisthis,我的类似要求通过这种方式得到了很好的满足您可以通过以下代码对其进行测试:

    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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flask-SQLAlchemy多对多插入

来自分类Dev

在AWS Elastic Beanstalk中使用sqlite db部署Flask App

来自分类Dev

如何使用flask-sqlalchemy多次插入多对多关系?

来自分类Dev

Flask-SQLAlchemy多对多

来自分类Dev

Flask-SQLAlchemy查询多对多

来自分类Dev

使用Flask-SQLAlchemy选择多对多

来自分类Dev

Flask SQLAlchemy多对多删除元素

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

SQLAlchemy + Flask多对一关系

来自分类Dev

SqlAlchemy(Postgres + Flask):如何求和多列?

来自分类Dev

用Flask-SQLAlchemy初始化dB(sqlite3)

来自分类Dev

使用Flask-SQLAlchemy进行多对多查询

来自分类Dev

Jsonify Flask-SQLAlchemy Flask中的多对一关系

来自分类Dev

如何插入到多对多关系中。SQLite

来自分类Dev

C# 和 SQLite;插入多对多关系的最佳代码

来自分类Dev

通过Flask显示好友名称多对多sqlalchemy

来自分类Dev

Flask-Sqlalchemy 3种多对多关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

我应该使用flask sqlalchemy多对多关系吗?

来自分类Dev

Flask-SQLAlchemy筛选与父模型的多对多关系

来自分类Dev

Flask-SQLAlchemy更新一对多记录

来自分类Dev

Jsonify flask-sqlalchemy烧瓶中的多对一关系

来自分类Dev

Flask-Sqlalchemy,多对多关系中的辅助表的主键

来自分类Dev

在Flask sqlalchemy中订购一对多模型?

来自分类Dev

使用Flask SQLAlchemy从SQLite切换到MySQL

来自分类Dev

sqlite多对多+邻接表

来自分类Dev

Flask-SQLAlchemy查询带有多个必需标签的多对多标签

来自分类Dev

如何使用SQLite在Flask中设置测试脚本?

来自分类Dev

插入sqlite db-python

Related 相关文章

热门标签

归档